Как да добавите потребителски атрибути към персонализиран изглед в Android?
sobes.tech AI
Отговор от AI
-
Определяне на атрибути в
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() за освобождаване на ресурсите.