Sobes.tech
Middle

Wie verbindet man eine benutzerdefinierte Ansicht mit einem benutzerdefinierten Layout?

sobes.tech KI

Antwort von AI

Es gibt mehrere Möglichkeiten:

  1. Verwendung des Konstruktors mit einem Satz von Attributen AttributeSet: Dies ist die gebräuchlichste Methode. Im Konstruktor der View können Sie die Attribute aus dem XML-Markup lesen und anwenden.

    public class MyCustomView extends View {
    
        public MyCustomView(Context context, AttributeSet attrs) {
            super(context, attrs);
            // Attribute aus attrs lesen
            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView);
            // Werte der Attribute abrufen, z.B.:
            // int someValue = a.getInt(R.styleable.MyCustomView_someAttribute, defaultValue);
            a.recycle(); // Es ist wichtig, das TypedArray freizugeben
    
            // View basierend auf den gelesenen Attributen initialisieren
            // ...
        }
    
        // ... andere Konstruktoren und Methoden
    }
    

    Beim Definieren eines benutzerdefinierten Layouts in XML können diese Attribute verwendet werden:

    <com.example.app.MyCustomView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:someAttribute="someValue" />
    
  2. Layout innerhalb der View inflaten: Wenn die View aus mehreren anderen Views besteht, können diese aus einer separaten XML-Datei innerhalb der benutzerdefinierten View inflatiert werden.

    public class MyCompositeView extends LinearLayout {
    
        public MyCompositeView(Context context, AttributeSet attrs) {
            super(context, attrs);
            LayoutInflater.from(context).inflate(R.layout.my_custom_layout, this, true);
            // Jetzt können Elemente innerhalb von my_custom_layout gefunden werden
            // TextView myTextView = findViewById(R.id.myTextView);
            // ...
        }
    
        // ... andere Konstruktoren und Methoden
    }
    

    my_custom_layout.xml könnte so aussehen:

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/myTextView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Hallo benutzerdefiniertes Layout!" />
    
        <!-- andere Layout-Elemente -->
    
    </LinearLayout>
    

    Dieses benutzerdefinierte Layout MyCompositeView wird dann in einer anderen XML-Datei verwendet:

    <com.example.app.MyCompositeView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    

Die Wahl der Methode hängt von der Komplexität der benutzerdefinierten View ab: Für einfache Views mit wenigen Elementen reicht die erste Methode aus; für zusammengesetzte Views mit komplexerer interner Struktur ist die zweite Methode geeigneter.