Saya telah mencoba selama beberapa hari sekarang untuk membuat tata letak saya lebih efisien dengan mengubah dari menggunakan beberapa tingkat bersarang LinearLayouts
menjadi satu RelativeLayout
dan telah menemukan beberapa masalah yang saya belum dapat menemukan solusi untuk ...
Saya telah mencari grup pemula Android dan situs ini dan belum dapat menemukan apa pun yang dapat membantu saya memecahkan masalah.
Saya membaca di salah satu blog bahwa Anda dapat menggabungkan tata letak dengan menggabungkan dan menyertakan tag. Jadi yang saya miliki adalah file tata letak utama dengan RelativeLayout
elemen root. Di dalamnya saya memiliki 5 tag include yang mereferensikan 5 file tata letak xml berbeda yang masing-masing memiliki elemen gabungan untuk root (semua file gabungan saya sama kecuali untuk id di dalamnya).
Saya mengalami dua masalah, yang akan saya jelaskan setelah memposting versi sederhana dari kode tata letak saya:
Contoh File Tata Letak Utama:
<?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>
Contoh termasuk file gabungan:
<?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>
Saya mengalami dua masalah:
1) android:layout_*
Atribut tampaknya diabaikan saat digunakan dalam tag include dan semua tata letak yang digabungkan ditampilkan di atas satu sama lain. Menurut posting ini ( http://developer.android.com/resources/articles/layout-tricks-reuse.html ) " android:layout_*
atribut apa pun dapat digunakan dengan <include />
tag"
2) Karena saya tidak bisa membuatnya berfungsi, saya memutuskan untuk mencoba menambahkan android:layout_below
atribut ke TextView
item pertama di setiap file tata letak gabungan, yang berarti bahwa setiap file gabungan akan mereferensikan id dari file tata letak gabungan lainnya ... Untuk sebagian besar ini benar-benar berfungsi dan tata letak saya terlihat bagus. Namun, saya mendapatkan kesalahan pada salah satu android:layout_below
atribut yang mengatakan bahwa ia tidak dapat menemukan id yang saya tentukan ... Saya telah memeriksa dua dan tiga kali id untuk memastikannya benar. Bagian yang paling aneh adalah saya menggunakan AutoFill
fitur tersebut untuk meletakkan id di atribut di tempat pertama.
Jika ada yang punya saran atau solusi, saya akan dengan senang hati mencobanya. Juga, jika ada yang bisa memikirkan cara bagi saya untuk hanya memiliki satu file layout gabungan xml daripada 5 yang akan sangat dihargai. Saya tidak dapat menemukan cara untuk melakukan itu karena saya perlu memiliki akses ke setiap item di file tata letak gabungan saat runtime ...