私は数日間、ネストされた複数のレベルLinearLayouts
を1つに変換することでレイアウトをより効率的にするために試みておりRelativeLayout
、回避策を見つけることができなかったいくつかの問題に遭遇しました...
私はAndroid初心者グループとこのサイトを検索しましたが、問題の解決に役立つ情報を見つけることができませんでした。
レイアウトを結合してタグを含めることができるブログの1つを読みました。だから私が持っているのはRelativeLayout
ルート要素を持つメインレイアウトファイルです。その中に、ルートのマージ要素を持つ5つの異なるxmlレイアウトファイルを参照する5つのincludeタグがあります(私のマージファイルは、それらのIDを除いてすべて同じです)。
私は2つの問題に直面しています。レイアウトコードの簡略版を投稿した後で説明します。
メインレイアウトファイルの例:
<?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>
2つの問題が発生しています。
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が見つからないという属性の1つでエラーが発生します... IDが正しいことを確認するために、IDをダブルおよびトリプルでチェックしました。最も変わった部分はAutoFill
、最初に属性にIDを配置する機能を使用したことです。
誰かが提案や回避策を持っているなら、私はそれらを試して幸せ以上のものになります。また、私が5つではなく1つのマージxmlレイアウトファイルを用意する方法を誰かが考えることができれば、それは大歓迎です。実行時にマージレイアウトファイルの各アイテムにアクセスする必要があるため、その方法を見つけることができませんでした...