Wie fügt man benutzerdefinierte Attribute für eine benutzerdefinierte Ansicht in Android hinzu?
sobes.tech KI
Antwort von AI
-
Definition der Attribute in
attrs.xml: Es wird die Dateires/values/attrs.xmlerstellt (oder zu einer bestehenden hinzugefügt). Darin wird<declare-styleable>mit dem Namen der benutzerdefinierten View definiert und<attr>für jedes benutzerdefinierte Attribut aufgelistet, wobei das Format (format) angegeben wird.<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyCustomView"> <attr name="customText" format="string"/> <attr name="customColor" format="color"/> <attr name="customEnabled" format="boolean"/> </declare-styleable> </resources> -
Verwendung der Attribute im XML-Layout: Im XML-Layout, in dem die benutzerdefinierte View verwendet wird, werden bestimmte Attribute mit dem Namensraum
apphinzugefügt.<com.example.MyCustomView android:layout_width="wrap_content" android:layout_height="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto" app:customText="Hallo benutzerdefinierte View" app:customColor="@color/colorPrimary" app:customEnabled="true"/> -
Lesen der Attribute im View-Code: Im Konstruktor der benutzerdefinierten View (normalerweise der, der
ContextundAttributeSetannimmt) werden die KlassenTypedArrayundobtainStyledAttributesverwendet, um die Werte der in XML angegebenen Attribute zu lesen.class MyCustomView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : View(context, attrs, defStyleAttr) { // Variablen zum Speichern der Attributwerte private var customText: String? = null private var customColor: Int = 0 private var customEnabled: Boolean = false init { // Erhalten des TypedArray mit den Attributen val typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView, defStyleAttr, 0) try { // Lesen der Attributwerte customText = typedArray.getString(R.styleable.MyCustomView_customText) customColor = typedArray.getColor(R.styleable.MyCustomView_customColor, 0) // Standardwert customEnabled = typedArray.getBoolean(R.styleable.MyCustomView_customEnabled, false) // Standardwert // Jetzt können customText, customColor und customEnabled verwendet werden, um die View zu konfigurieren // Zum Beispiel: // if (customEnabled) { /* ... */ } } finally { // Wichtig! Ressourcen freigeben durch Aufruf von recycle() typedArray.recycle() } } // ... restliche Logik der View ... }