Rumah >Java >javaTutorial >Bagaimana untuk Mencipta ViewGroup Tersuai untuk Reka Letak Pecah Garis?

Bagaimana untuk Mencipta ViewGroup Tersuai untuk Reka Letak Pecah Garis?

Susan Sarandon
Susan Sarandonasal
2024-11-08 02:32:01734semak imbas

How to Create a Custom ViewGroup for Line-Breaking Layouts?

Kumpulan Pandangan Tersuai untuk Reka Letak Pecah Baris

Masalah:

Anda perlu mencipta susun atur yang mempersembahkan berbilang widget dalam cara yang boleh dibalut, membahagikannya kepada baris apabila perlu agar sesuai dengan ruang yang tersedia. Komponen ViewGroup lalai tidak mempunyai fungsi ini.

Penyelesaian:

Untuk mencapai pemecahan baris, anda boleh mencipta ViewGroup tersuai. Begini caranya:

  1. Ukur Kanak-kanak:

    Dalam onMeasure(), hitung lebar yang tersedia dan ulangi melalui paparan anak. Bagi setiap kanak-kanak, ukur lebar dan tingginya. Kemas kini garis_tinggi untuk mewakili ketinggian maksimum mana-mana kanak-kanak dalam garisan tertentu.

  2. Tentukan Pemisah Garis:

    Semasa pengukuran, semak sama ada lebar terkumpul paparan kanak-kanak melebihi lebar yang tersedia. Jika ya, tetapkan semula lebar dan naikkan ypos ke baris seterusnya.

  3. Tetapkan Parameter Reka Letak:

    Timpa generateDefaultLayoutParams() dan checkLayoutParams () untuk menentukan parameter reka letak tersuai anda. Parameter ini boleh menentukan jarak antara widget, contohnya.

  4. Paparan Kanak-kanak Reka Letak:

    Dalam onLayout(), ulangi melalui paparan anak sekali lagi dan letakkannya berdasarkan dimensi yang diukur dan pembolehubah xpos dan ypos. Kemas kini xpos semasa anda menambahkan widget pada baris.

  5. Sediakan Sokongan Atribut XML:

    Buat atribut XML tersuai untuk mendedahkan parameter reka letak. Ini membolehkan anda menentukannya dalam fail XML reka letak anda.

Contoh Pelaksanaan:

public class PredicateLayout extends ViewGroup {

    private int line_height;

    public PredicateLayout(Context context) {
        super(context);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // Calculate available width
        // Iterate through child views and measure them

        if (xpos + childw > width) {
            xpos = getPaddingLeft();
            ypos += line_height;
        }
        ...
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        for (int i = 0; i < count; i++) {
            if (xpos + childw > width) {
                xpos = getPaddingLeft();
                ypos += line_height;
            }
            // Position the child view
        }
    }
}

Dengan menggunakan reka letak tersuai ini, anda boleh mencapai tingkah laku boleh bungkus yang diingini untuk widget anda.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta ViewGroup Tersuai untuk Reka Letak Pecah Garis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn