Как добавить пользовательские атрибуты для кастомного view в Android?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech 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()для освобождения ресурсов.