Wie verbindet man eine benutzerdefinierte Ansicht mit einem benutzerdefinierten Layout?
sobes.tech KI
Antwort von AI
Es gibt mehrere Möglichkeiten:
-
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" /> -
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.xmlkö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
MyCompositeViewwird 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.