여러 수준의 중첩 LinearLayouts
을 사용하여 하나로 변환하여 레이아웃을 더 효율적으로 만들기 위해 며칠 동안 노력해 RelativeLayout
왔으며 해결 방법을 찾을 수 없었던 몇 가지 문제가 발생했습니다.
Android 초보자 그룹과이 사이트를 검색했지만 문제를 해결하는 데 도움이되는 것을 찾을 수 없었습니다.
레이아웃을 병합하고 태그를 포함 할 수있는 블로그 중 하나를 읽었습니다. 그래서 내가 가진 것은 RelativeLayout
루트 요소 가있는 기본 레이아웃 파일입니다 . 그 안에는 각각 루트에 대한 병합 요소가있는 5 개의 다른 xml 레이아웃 파일을 참조하는 5 개의 포함 태그가 있습니다 (내 병합 파일은 모두 ID를 제외하고 동일합니다).
두 가지 문제가 발생하는데, 레이아웃 코드의 단순화 된 버전을 게시 한 후 설명하겠습니다.
샘플 메인 레이아웃 파일 :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/translucent_gray" >
<include
android:id="@+id/running_gallery_layout_id"
layout="@layout/running_gallery_layout" />
<include
android:id="@+id/recent_gallery_layout_id"
layout="@layout/recent_gallery_layout"
android:layout_below="@id/running_gallery_layout_id" />
<include
android:id="@+id/service_gallery_layout_id"
layout="@layout/service_gallery_layout"
android:layout_below="@id/recent_gallery_layout_id" />
<include
android:id="@+id/process_gallery_layout_id"
layout="@layout/process_gallery_layout"
android:layout_below="@id/service_gallery_layout_id" />
</RelativeLayout>
샘플 포함 병합 파일 :
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
style="@style/TitleText"
android:id="@+id/service_gallery_title_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:text="@string/service_title" />
<Gallery
android:id="@+id/service_gallery_id"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_below="@id/service_gallery_title_text_id" />
<TextView
style="@style/SubTitleText"
android:id="@+id/service_gallery_current_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/service_gallery_title_text_id"
android:layout_above="@id/service_gallery_id" />
</merge>
두 가지 문제가 있습니다.
1) android:layout_*
include 태그에서 사용할 때 속성이 무시되는 것처럼 보이고 병합 된 모든 레이아웃이 서로 위에 표시됩니다. 이 게시물 ( http://developer.android.com/resources/articles/layout-tricks-reuse.html ) 에 따르면 "모든 android:layout_*
속성을 <include />
태그 와 함께 사용할 수 있습니다. "
2)이 작업을 수행 할 수 없기 때문에 각 병합 레이아웃 파일 android:layout_below
의 첫 번째 TextView
항목에 속성을 추가하기로 결정했습니다 . 즉, 각 병합 파일이 다른 병합 레이아웃 파일의 ID를 참조한다는 의미입니다. 실제로 작동했고 내 레이아웃은 괜찮아 보입니다. 그러나 android:layout_below
속성 중 하나에서 내가 지정한 ID를 찾을 수 없다는 오류가 발생했습니다 . ID가 올바른지 확인하기 위해 ID를 두 번 및 세 번 확인했습니다. 가장 이상한 부분은 AutoFill
처음에 속성에 ID를 넣는 기능을 사용했다는 것 입니다.
누군가 제안이나 해결 방법이 있으면 기꺼이 시도해 볼 것입니다. 또한 누군가가 5 대신 병합 xml 레이아웃 파일을 하나만 갖는 방법을 생각할 수 있다면 크게 감사하겠습니다. 런타임에 병합 레이아웃 파일의 각 항목에 액세스해야하므로이를 수행하는 방법을 찾을 수 없습니다.