Jika Anda tidak terlalu paham dengan prinsip RecyclerView, saya sangat menyarankan Anda untuk membacanya.
Proyek artikel ini juga merupakan bahan yang sangat baik untuk mempelajari LayoutManager kustom, Anda dapat membacanya jika Anda membutuhkannya.
Kata pengantar
Bentuknya adalah kontrol yang saya gunakan sejak saya bergabung dengan perusahaan, awalnya saya menggunakan ScrollablePanel, dari awal masih fancy hanging, kemudian saya gunakan dengan terampil.
Kontrol yang ditulis oleh orang-orang besar benar-benar memberikan kemudahan yang besar untuk pekerjaan saya, tetapi masih ada beberapa masalah:
- Tabel tidak beraturan tidak dapat diterapkan
- Intinya adalah penumpukan lapisan kedua RecyclerView, jika hanya satu lapisan RecyclerView yang digunakan, ini akan membawa peningkatan kinerja
- Terkadang beberapa RecyclerView akan menyebabkan deformasi antarmuka
Setelah saya mempelajari RecyclerView secara mendalam, saya bertanya-tanya apakah saya hanya dapat menggunakan satu lapisan RecyclerView dan mengimplementasikannya dengan bantuan LayoutManager. Saya menulis dan menemukan bahwa idenya layak dan mewujudkan kontrol tabel TableView berdasarkan RecyclerView. Mari kita lihat efeknya terlebih dahulu:
Foto Dinding
Saya sering melihat siswa bertanya bagaimana menerapkan beranda serupa, dan sekarang dapat dengan mudah diterapkan tanpa menyesuaikan Tampilan ~
Jadwal kelas
bentuk
TableView memiliki karakteristik sebagai berikut:
- Mendukung bentuk tidak beraturan
- Mendukung pengguliran horizontal dan vertikal
- Dukungan atas dan kiri mengambang
- Berdasarkan RecyclerView, RecyclerView memiliki karakteristik subview khusus, daur ulang yang efisien, dan keragaman subview.
- Tidak ada penumpukan RecyclerView multi-lapisan, kinerja yang lebih baik
Alamat Github
menggunakan
Langkah pertama | tambahkan file xml
< ? xml version = "1.0" encoding = "utf-8"? > < FrameLayout xmlns: android = " xmlns: tools = " android: layout_width = "match_parent" android: layout_height = "match_parent" alat: konteks = ". ui.fragment.table.TableFragment" > < com.orient.me.widget.rv.adapter.TableView android: id = "@ + id / tb" android: layout_width = "match_parent" android: layout_height = "match_parent" / > < / FrameLayout >Langkah 2 | Dapatkan TableView
Sebelum menampilkan kode, pelajari tentang fungsi utama di TableView:
Deskripsi metode setTitle (boolean isLeftOpen, boolean isTopOpen) Apakah akan menampilkan judul mengambang di sisi kiri atau atas, tampilan default adalah setModeAndValue (mode int, int w, int h) mode tabel mode, lebar spesifik w \ jumlah sel dalam satu baris, tinggi spesifik-h \ jumlah sel dalam kolom
Apa yang dilakukan setTitle (boolean isLeftOpen, boolean isTopOpen) ini? Untuk memastikan bahwa panjang dan lebar setiap sel tabel sama (subview dapat menempati beberapa sel dalam arah horizontal dan vertikal), dua metode digunakan untuk lebar dan tinggi:
- Tetapkan nilai tertentu, lalu lebar atau tinggi sel menjadi spesifik
- Atur jumlah sel yang dapat ditampung dalam satu baris atau kolom
Jadi ada dua macam lebar dan tinggi, banyaknya mode = 2 * 2, totalnya ada:
Deskripsi Mode w Deskripsi h TableLayoutManager.MODE_A Jumlah sel dalam baris tata letak induk Jumlah sel dalam kolom tata letak induk TableLayoutManager.MODE_B Jumlah sel dalam kolom TableLayoutManager.MODE_C Jumlah sel dalam baris tata letak induk Jumlah sel dalam baris Tinggi sel Jumlah sel dalam satu kolom
Kode:
// jika menggunakan pisau mentega // atau gunakan findViewById @Bayu_joo (R.) TableView mTable; // Default-nya adalah TableLayoutManager.MODE_A, 4, 8 mTable.setModeAndValue (TableLayoutManager.MODE_A, 6, 8);Langkah 3 | Buat kelas data
Menerapkan antarmuka ICellItem:
kelas publik TableCell mengimplementasikan ICellItem { nama String pribadi; nilai String pribadi; tipe int pribadi; baris int pribadi; private int col; widthSpan int pribadi; heightSpan int pribadi; // ... Abaikan metode konstruktor dan Get Set @Mengesampingkan public int getRow () { baris kembali; } @Mengesampingkan public int getCol () { kembali col; } @Mengesampingkan public int getWidthSpan () { return widthSpan; } @Mengesampingkan public int getHeightSpan () { kembali heightSpan; } }Langkah 4 | Siapkan adaptor
pribadi TableAdapter < TableCell > mAdapter; dilindungi void initWidget (Lihat root) { // Dengan asumsi untuk menginisialisasi dalam metode ini mTable.setAdapter (mAdapter = TableAdapter baru < TableCell > (ArrayList baru < > ()) { @Mengesampingkan public int getItemLayout (TableCell tableCell, int pos) { // ... kembali ke file tata letak subview // Mendukung berbagai jenis return R.layout.table_cell_content_item; } @Mengesampingkan publik BaseAdapter.ViewHolder < TableCell > onCreateViewHolder (Lihat root, int itemType) { // itemType adalah file tata letak subview // Kembalikan ViewHolder tertentu sesuai dengan tata letaknya mengembalikan ContentHolder baru (root); } }); } // ViewHolder Khusus kelas ContentHolder memperluas BaseAdapter.ViewHolder < TableCell > { TextView mContent; public ContentHolder (View itemView) { super (itemView); mContent = itemView.findViewById (R.id.tv_name); } @Mengesampingkan void terlindungi onBind (TableCell tableCell) { mContent.setText (tableCell.getValue ()); } }Langkah 5 | Pemetaan ulang
Jika mode yang digunakan oleh TableView adalah Mode_A, Mode_C, dan Mode_D, Anda perlu mengukur lagi:
mTable.post (() - > mTable.reMeasure ());Untuk menyimpulkan
Secara umum, inti dari TableView adalah TableLayoutManager, yang merupakan LayoutManager di RecyclerView, yang mirip dengan GridLayoutManager yang dapat dialihkan secara horizontal dan vertikal kapan saja. Jika Anda tertarik dengan TableView, saya akan membahas prinsipnya dalam artikel lanjutan.
Terakhir, bagi programmer, ada terlalu banyak konten pengetahuan dan teknologi untuk dipelajari. Jika tidak ingin tersingkirkan oleh lingkungan, mereka harus terus meningkatkan diri. Kami selalu beradaptasi dengan lingkungan, bukan lingkungan yang beradaptasi dengan kami!
Berikut adalah lusinan set yang terkait dengan diagram sistem teknis di atas Pertanyaan wawancara dari Tencent, Toutiao, Ali, Meituan dan perusahaan lain selama 19 tahun , Mengatur poin-poin teknis ke dalam video dan PDF (sebenarnya butuh lebih banyak energi dari yang diharapkan), termasuk Konteks pengetahuan + banyak detail , Karena keterbatasan tempat, berikut ini sebagian berupa gambar.
Saya yakin ini akan memberi Anda banyak keuntungan:
[Video pembelajaran lanjutan Android], [set lengkap wawancara Android menipu PDF], [Catatan pengetahuan inti pengembangan Android] dapat diperoleh melalui pesan pribadi [Android] gratis!
Menjadi seorang programmer itu mudah. Menjadi programmer yang baik membutuhkan pembelajaran yang berkelanjutan. Dari programmer junior hingga programmer senior, dari arsitek junior hingga arsitek senior, atau menuju manajemen, dari manajer teknis hingga direktur teknis, setiap tahap Perlu menguasai kemampuan yang berbeda. Tentukan arah karier Anda sejak dini untuk menyingkirkan rekan-rekan Anda dalam pekerjaan dan peningkatan kemampuan Anda.
- Bagaimana mempersiapkan pertanyaan wawancara bagi pemrogram seluler untuk berganti pekerjaan dan meningkatkan tingkat keberhasilan wawancara hingga 80%?
- Penjelasan terperinci tentang cadangan keterampilan yang diperlukan untuk pengalaman wawancara Android, telah mendapat tawaran itu
- Bingung soal arah teknisnya? Pengembang seluler senior berbicara tentang arah pengembangan Android di masa depan
- Ini adalah kumpulan sistem keterampilan penting + rute pembelajaran untuk insinyur Android dari produsen papan atas