Heim > Java > javaLernprogramm > Wie erstelle ich eine benutzerdefinierte ViewGroup für Layouts mit Zeilenumbruch?

Wie erstelle ich eine benutzerdefinierte ViewGroup für Layouts mit Zeilenumbruch?

Susan Sarandon
Freigeben: 2024-11-08 02:32:01
Original
732 Leute haben es durchsucht

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

Benutzerdefinierte Ansichtsgruppe für Zeilenumbruch-Layout

Problem:

Sie müssen eine erstellen Layout, das mehrere Widgets auf umschließbare Weise darstellt und sie bei Bedarf in Zeilen unterteilt, um sie an den verfügbaren Platz anzupassen. Den standardmäßigen ViewGroup-Komponenten fehlt diese Funktionalität.

Lösung:

Um einen Zeilenumbruch zu erreichen, können Sie eine benutzerdefinierte ViewGroup erstellen. So geht's:

  1. Untergeordnete Elemente messen:

    Berechnen Sie in onMeasure() die verfügbare Breite und durchlaufen Sie die untergeordneten Ansichten. Messen Sie für jedes Kind seine Breite und Höhe. Aktualisieren Sie die Zeilenhöhe, um die maximale Höhe jedes untergeordneten Elements in einer bestimmten Zeile darzustellen.

  2. Zeilenumbrüche bestimmen:

    Überprüfen Sie während der Messung, ob die Die kumulierte Breite der untergeordneten Ansichten überschreitet die verfügbare Breite. Wenn dies der Fall ist, setzen Sie die Breite zurück und erhöhen Sie die Ypos auf die nächste Zeile.

  3. Layoutparameter festlegen:

    GenerateDefaultLayoutParams() und checkLayoutParams überschreiben (), um Ihre benutzerdefinierten Layoutparameter zu definieren. Diese Parameter können beispielsweise den Abstand zwischen Widgets angeben.

  4. Layout untergeordneter Ansichten:

    Iterieren Sie in onLayout() erneut durch untergeordnete Ansichten und Positionieren Sie sie basierend auf den gemessenen Abmessungen und den Variablen xpos und ypos. Aktualisieren Sie xpos, wenn Sie der Zeile Widgets hinzufügen.

  5. Bereitstellung von XML-Attributunterstützung:

    Erstellen Sie ein benutzerdefiniertes XML-Attribut, um die Layoutparameter verfügbar zu machen. Dadurch können Sie sie in Ihren Layout-XML-Dateien angeben.

Beispielimplementierung:

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
        }
    }
}
Nach dem Login kopieren

Durch die Verwendung dieses benutzerdefinierten Layouts können Sie dies tun Erzielen Sie das gewünschte Wrapping-Verhalten für Ihre Widgets.

Das obige ist der detaillierte Inhalt vonWie erstelle ich eine benutzerdefinierte ViewGroup für Layouts mit Zeilenumbruch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage