Saya menggunakan tata letak tabel untuk menampilkan data sebagai tabel, tapi saya ingin tabel dengan kolom yang ditentukan pengguna dan baris dengan batas. Saran?
sumber
Saya menggunakan tata letak tabel untuk menampilkan data sebagai tabel, tapi saya ingin tabel dengan kolom yang ditentukan pengguna dan baris dengan batas. Saran?
Solusi saya untuk masalah ini adalah menempatkan sumber daya yang dapat ditarik xml pada bidang latar belakang setiap sel. Dengan cara ini Anda bisa menentukan bentuk dengan batas yang Anda inginkan untuk semua sel. Satu-satunya ketidaknyamanan adalah bahwa batas sel ekstrim memiliki setengah lebar dari yang lain tetapi tidak masalah jika meja Anda mengisi seluruh layar.
Sebuah contoh:
drawable / cell_shape.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape= "rectangle" >
<solid android:color="#000"/>
<stroke android:width="1dp" android:color="#ff9"/>
</shape>
tata letak / my_table.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TableRow
android:id="@+id/tabla_cabecera"
android:layout_width="match_parent"
android:layout_height="match_parent"></TableRow>
<TableLayout
android:id="@+id/tabla_cuerpo"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow
android:id="@+id/tableRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
</TableRow>
<TableRow
android:id="@+id/tableRow3"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
</TableRow>
<TableRow
android:id="@+id/tableRow4"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:padding="5dp"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
</TableRow>
</TableLayout>
</LinearLayout>
Sunting: Contoh
Sunting2: Contoh lain (dengan lebih banyak elemen: sudut lingkaran, gradien ...)
Saya telah menjelaskan masalah ini dengan lebih detail di http://blog.intelligenia.com/2012/02/programacion-movil-en-android.html#more . Ini dalam bahasa Spanyol tetapi ada beberapa kode dan gambar dari tabel yang lebih kompleks.
view.setBackground(?)
Saya harus setuju dengan Brad. Itu jawaban yang mengerikan. Dokumentasi Android menyatakan bahwa kontainer TableLayout tidak menampilkan garis perbatasan, jadi mengirimkannya ke situs Android tidak akan membantu mereka sedikit. Saya dapat menemukan solusi "kotor" pada droidnova, yang melibatkan pengaturan warna latar belakang untuk TableLayout, kemudian menetapkan warna latar belakang yang berbeda untuk TableRow dan menambahkan layout_margin ke baris. Saya tidak menyukai solusi ini, tetapi berfungsi untuk batas baris. Saya kira Anda bisa melakukan hal yang sama dengan item yang menyusun setiap item "sel" tetapi saya belum memverifikasi.
Contoh yang mirip dengan yang ada di DroidNova:
sumber
TableRow
objek?JIKA Anda hanya mencoba untuk memiliki garis di antara baris (misalnya, tepat di atas baris "Total") maka ada solusi yang mudah - cukup tambahkan TableRow dengan warna latar belakang dan ketinggian layout_height tertentu seperti ini:
Setel
android:layout_height="1px"
atau setebal apa pun batas yang Anda inginkan. Isi kolom TextView kosong sebanyak yang Anda butuhkan untuk mencocokkan sisa tabel Anda, atau cukup gunakan satuandroid:layout_span
seperti yang saya tunjukkan.Outputnya akan terlihat seperti ini:
Jika Anda mencoba menambahkan batas yang lebih rumit, maka jawaban lain yang sudah diposkan lebih sesuai.
sumber
TextView
kapan Anda bisa menggunakanView
? Juga bukan praktik yang baik untuk menentukan piksel yang tepat. Gunakan dp / sp sebagai gantinya. Lihat juga utas ini: stackoverflow.com/questions/2025282/… .Yang saya inginkan adalah tabel seperti ini
Saya menambahkan ini di styles.xml saya :
Kemudian dalam tata letak tabel saya :
sumber
Anda juga dapat melakukan ini secara progamatik, bukan melalui xml, tetapi ini sedikit lebih "meretas". Tapi jangan beri pria pilihan dan Anda tidak memberinya pilihan: p .. Ini kodenya:
sumber
Untuk membuat batas runtuh 1dp di sekitar setiap sel tanpa menulis kode java dan tanpa membuat tata letak xml lain dengan
<shape...>
tag, Anda dapat mencoba solusi ini:Di
<TableLayout...>
addandroid:background="#CCC"
danandroid:paddingTop="1dp"
danandroid:stretchColumns="0"
Di
<TableRow...>
addandroid:background="#CCC"
danandroid:paddingBottom="1dp"
danandroid:paddingRight="1dp"
Di setiap sel / anak di TableRow, yaitu
<TextView...>
tambahkanandroid:background="#FFF"
danandroid:layout_marginLeft="1dp"
Sangat penting untuk mengikuti bantalan dan margin seperti yang dijelaskan. Solusi ini akan menggambar properti border 1dp alias border-collapse di (X) HTML / CSS.
Warna latar belakang
<TableLayout...>
dan<TableRow...>
mewakili warna garis batas dan latar belakang<TextView...>
mengisi sel tabel. Anda dapat menaruh beberapa sel dalam sel jika perlu.Contohnya ada di sini:
sumber
Di sini saya telah mendesain daftar dengan gambar desain berikut. Namafile listitem saya adalah Propertylistitem.xml dan cellborder.xml digunakan bentuk yang dapat ditarik untuk output cellborder, ditampilkan dalam gambar ini. kode yang diperlukan saya tambahkan di sini.
Nama File: propertylistitem.xml
filename: cellborder.xml Di sini saya hanya ingin membatasi dalam desain saya, jadi saya beri komentar pada tag warna solid.
sumber
Setelah pencarian yang panjang dan berjam-jam mencoba ini adalah kode paling sederhana yang bisa saya buat:
tv adalah TextView dengan teks sederhana dan konten adalah wadah saya (LinearLayout dalam Kasus ini). Itu sedikit lebih mudah.
sumber
setBackgroundDrawable()
dapat digunakan sebagai gantinya.Nah itu mungkin menginspirasi Anda Langkah-langkah itu menunjukkan cara membuat tabel berbatasan secara dinamis
di sini adalah tampilan tabel
dan di sini baris untuk menggunakan "attrib_row.xml"
dan kita bisa menambahkan file xml ini ke drawable untuk menambahkan border ke tabel kita "border.xml"
dan akhirnya di sini adalah kode ringkas yang ditulis dalam Kotlin tetapi mudah untuk mengubahnya menjadi java jika Anda perlu
well temps adalah daftar array yang berisi data:
ArrayList<Double>()
dan Anda dapat menggunakannya dalam fragmen Anda misalnya seperti ini
hasil akhirnya terlihat seperti ini
sumber
Bagaimana kalau meng-override metode onDraw dan kemudian melukis garis ke kanvas?
sumber
Saya menggunakan solusi ini: di
TableRow
, saya buat untuk setiap selLinearLayout
dengan garis vertikal dan sel aktual di dalamnya, dan setelah setiapTableRow
, saya menambahkan garis horizontal.Lihatlah kode di bawah ini:
Semoga ini bisa membantu.
sumber
Berikut ini cara yang bagus untuk menyelesaikan masalah ini:
Buat menggambar persegi panjang dengan sudut bulat seperti ini:
simpan di folder drawable dengan nama rounded_border.xml
Kemudian buat tata letak relatif yang menggunakan rounded_border sebagai latar belakang seperti ini:
simpan itu di folder layout Anda dan beri nama table_with_border.xml
maka setiap kali Anda membutuhkan tabel seperti itu tarik ke tampilan menggunakan sintaks include seperti ini:
Anda mungkin ingin menambahkan spasi di sekitar tepiannya - jadi bungkus saja menyertakannya dalam LinearLayout dan tambahkan beberapa bantalan di sekeliling tepinya.
Cara sederhana dan mudah untuk mendapatkan perbatasan cantik di sekitar meja.
sumber
Stroke menggandakan pada bagian middel, saya menggunakan daftar lapisan ini dapat ditarik:
sumber
Saya pikir yang terbaik untuk membuat gambar sembilan-patch 1px, dan menggunakan atribut showDividers di TableRow dan TableLayout karena keduanya LinearLayouts
sumber
Batas antara sel digandakan dalam jawaban di atas. Jadi, Anda dapat mencoba solusi ini:
sumber
Solusi lain adalah dengan menggunakan tata letak linier dan mengatur pembagi antara baris dan sel seperti ini:
Ini solusi kotor, tetapi sederhana dan juga berfungsi dengan latar belakang dan batas yang transparan.
sumber
Saya tahu ini adalah pertanyaan lama ... pokoknya ... jika Anda ingin agar xml Anda bagus dan sederhana, Anda dapat memperluas TableLayout dan mengganti dispatchDraw untuk melakukan beberapa gambar kustom.
Berikut ini adalah implementasi cepat dan kotor yang menggambar persegi panjang di sekitar tampilan tabel serta bilah horizontal dan vertikal:
Contoh xml dengan teks pembungkus kolom ketiga:
sumber
Jika Anda membutuhkan tabel dengan perbatasan, saya sarankan tata letak linier dengan berat, bukan TableLayout.
sumber