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 />
タグで使用できます」
android:layout_below
2) これを機能させることができなかったので、各マージ レイアウト ファイルの最初の項目に属性を追加してみることにしました。これTextView
は、各マージ ファイルが別のマージ レイアウト ファイルの ID を参照していることを意味します。ほとんどの場合、これは実際に機能し、私のレイアウトはうまく見えます。ただし、android:layout_below
属性の 1 つで、指定した ID が見つからないというエラーが表示されます... ID を 2 回および 3 回チェックして、ID が正しいことを確認しました。最も奇妙な部分はAutoFill
、最初に属性に ID を入れる機能を使用したことです。
誰かに提案や回避策があれば、喜んで試してみます。また、マージ xml レイアウト ファイルを 5 つではなく 1 つにする方法を誰かが考えてくれれば、非常にありがたいです。実行時にマージ レイアウト ファイルの各項目にアクセスする必要があるため、それを行う方法が見つかりませんでした...