The Android Developers Blog post memperkenalkanGridLayout
menunjukkan diagram ini tentang bagaimana bentang berdampak alokasi Indeks otomatis:
Saya mencoba untuk benar-benar menerapkannya menggunakan file GridLayout
. Inilah yang saya miliki sejauh ini:
<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.commonsware.android.gridlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
app:orientation="horizontal"
app:columnCount="8">
<Button
app:layout_columnSpan="2"
app:layout_rowSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_1"/>
<Button
app:layout_columnSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_2"/>
<Button
app:layout_rowSpan="4"
android:text="@string/string_3"/>
<Button
app:layout_columnSpan="3"
app:layout_rowSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_4"/>
<Button
app:layout_columnSpan="3"
android:layout_gravity="fill_horizontal"
android:text="@string/string_5"/>
<Button
app:layout_columnSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_6"/>
<android.support.v7.widget.Space
app:layout_column="0"
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
</android.support.v7.widget.GridLayout>
Saya harus memperkenalkan <Space>
elemen untuk memastikan setiap kolom memiliki lebar minimum, jika tidak, saya akan memiliki banyak kolom dengan lebar nol.
Namun, bahkan dengan mereka, saya mendapatkan ini:
Terutama:
Meskipun demikian
android:layout_gravity="fill_horizontal"
, widget saya dengan bentang kolom tidak memenuhi kolom bentangTerlepas dari
android:layout_rowSpan
nilainya, tidak ada yang mencakup baris
Adakah yang bisa mereproduksi diagram dari posting blog menggunakan GridLayout
?
Terima kasih!
sumber
Jawaban:
Rasanya cukup hack, tetapi saya berhasil mendapatkan tampilan yang benar dengan menambahkan kolom dan baris ekstra di luar yang dibutuhkan. Kemudian saya mengisi kolom ekstra dengan Spasi di setiap baris yang mendefinisikan tinggi dan mengisi baris ekstra dengan Spasi di setiap kolom yang mendefinisikan lebar. Untuk fleksibilitas ekstra, saya membayangkan ukuran Space ini dapat diatur dalam kode untuk memberikan sesuatu yang mirip dengan bobot. Saya mencoba menambahkan tangkapan layar, tetapi saya tidak memiliki reputasi yang diperlukan.
sumber
Space
elemen. Saya menambahkan tangkapan layar untuk pembaca mendatang. Terima kasih!rowCount
disetel ke 8? Kami membutuhkan 4 baris (ukuran terbesarrowSpan
) ditambah satu ekstraSpace
sehingga harus 5. Apa yang saya lewatkan?<Gridlayout>
sebagai kebalikan dari<android.support.v7.widget.GridLayout>
sumber
GridLayout
dari paket Dukungan Android, tata letaknya rusak, menunjukkan bahwa keduanya tidak sepenuhnya kompatibel. Juga, saya benar-benar berharap ada cara untuk melakukan ini yang tidak melibatkan ukuran kabel yang keras dari widget. Saya akan membiarkan ini bergulir sebentar, untuk melihat jawaban lain apa yang masuk (jika ada), tetapi saya akan menerima jawaban Anda jika tidak ada yang lebih baik yang muncul. Terima kasih lagi!android:
atribut yang diperlukan menjadi atributapp:
, menggunakan namespace XML backport. Ini berfungsi dengan backport.Anda harus menyetel layout_gravity dan layout_columntWeight pada kolom Anda
sumber
Pustaka GridLayout Dukungan Android V7 memudahkan distribusi ruang berlebih dengan mengakomodasi prinsip bobot. Untuk membuat kolom meregang, pastikan komponen di dalamnya menentukan berat atau gravitasi. Untuk mencegah kolom meregang, pastikan salah satu komponen dalam kolom tidak menentukan bobot atau gravitasi. Ingatlah untuk menambahkan ketergantungan untuk pustaka ini. Tambahkan com.android.support:gridlayout-v7:25.0.1 di build.gradle.
sumber
Mulai dari API 21, GridLayout sekarang mendukung bobot seperti LinearLayout. Untuk detailnya silakan lihat tautan di bawah ini:
https://stackoverflow.com/a/31089200/1296944
sumber