Jak přidat vlastní atributy pro vlastní pohled v Androidu?
sobes.tech AI
Odpověď od AI
-
Definice atributů v
attrs.xml: Vytvoříme souborres/values/attrs.xml(nebo jej přidáme do existujícího). V něm definujeme<declare-styleable>s názvem vlastního View a vypíšeme<attr>pro každý vlastní atribut, uvádějící jejich formát (format).<?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> -
Použití atributů v XML: V layout XML, kde je použit vlastní View, přidáme definované atributy s využitím jmenného prostoru
app.<com.example.MyCustomView android:layout_width="wrap_content" android:layout_height="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto" app:customText="Hello Custom View" app:customColor="@color/colorPrimary" app:customEnabled="true"/> -
Čtení atributů v kódu View: V konstruktoru vlastního View (obvykle v tom, který přijímá
ContextaAttributeSet), se používají třídyTypedArrayaobtainStyledAttributesk načtení hodnot atributů uvedených v XML.class MyCustomView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : View(context, attrs, defStyleAttr) { // Příklady proměnných pro uložení hodnot atributů private var customText: String? = null private var customColor: Int = 0 private var customEnabled: Boolean = false init { // Získání TypedArray s atributy val typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView, defStyleAttr, 0) try { // Čtení hodnot atributů customText = typedArray.getString(R.styleable.MyCustomView_customText) customColor = typedArray.getColor(R.styleable.MyCustomView_customColor, 0) // Výchozí hodnota customEnabled = typedArray.getBoolean(R.styleable.MyCustomView_customEnabled, false) // Výchozí hodnota // Nyní lze použít customText, customColor a customEnabled k nastavení View // Například: // if (customEnabled) { /* ... */ } } finally { // Důležité! Recyklace TypedArray pro uvolnění zdrojů typedArray.recycle() } } // ... zbytek logiky View ... }
Metoda obtainStyledAttributes vrací TypedArray, ze kterého lze extrahovat hodnoty atributů podle jejich indexů (generovaných třídou R). Po použití je nutné volat recycle() pro uvolnění zdrojů.