Kako dodati prilagođene atribute za prilagođeni prikaz u Androidu?
sobes.tech АИ
Одговор од АИ
-
Определење атрибута у
attrs.xml: Креира се датотекаres/values/attrs.xml(или се додаје у постојећу). У њој се дефинише<declare-styleable>са именом вашег прилагођеног View-а и набрајају се<attr>за сваки кориснички атрибут, указујући њихов формат (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> -
Користење атрибута у XML-у: У распореду XML, где се користи прилагођени View, додају се одређени атрибути користећи простор имена
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"/> -
Читање атрибута у коду View: У конструктору прилагођеног View-а (обично у оном који прихвата
ContextиAttributeSet), користе се класеTypedArrayиobtainStyledAttributesза читање вредности атрибута наведених у XML-у.class MyCustomView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : View(context, attrs, defStyleAttr) { // Примери променљивих за чување вредности атрибута private var customText: String? = null private var customColor: Int = 0 private var customEnabled: Boolean = false init { // Добијање TypedArray са атрибутима val typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView, defStyleAttr, 0) try { // Читање вредности атрибута customText = typedArray.getString(R.styleable.MyCustomView_customText) customColor = typedArray.getColor(R.styleable.MyCustomView_customColor, 0) // Стандардна вредност customEnabled = typedArray.getBoolean(R.styleable.MyCustomView_customEnabled, false) // Стандардна вредност // Сада можете користити customText, customColor и customEnabled за конфигурацију View-а // На пример: // if (customEnabled) { /* ... */ } } finally { // Важно! Рециклирање TypedArray за ослобађање ресурса typedArray.recycle() } } // ... остала логика View-а ... }
Метода obtainStyledAttributes враћа TypedArray, из којег можете извући вредности атрибута по њиховим индексима (генерисаним од стране класе R). Након коришћења, потребно је позвати recycle() за ослобађање ресурса.