Создание значений по умолчанию для пользовательских атрибутов с использованием стилей и тем

У меня несколько кастомов Views, в котором я создал настраиваемые настраиваемые атрибуты, которые объявлены в макете xml и считаны во время конструктора представления. Мой вопрос заключается в том, что, если я не предоставляю явные значения всем настраиваемым атрибутам при определении макета в XML, как я могу использовать стили и темы, чтобы иметь значение по умолчанию, которое будет передано моему Viewконструктор?

Например:

attrs.xml:

<declare-styleable name="MyCustomView">
    <attr name="customAttribute" format="float" />
</declare-styleable>

layout.xml (android: теги исключены для простоты):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/com.mypackage" >

    <-- Custom attribute defined, get 0.2 passed to constructor -->

    <com.mypackage.MyCustomView
        app:customAttribute="0.2" />

    <-- Custom attribute not defined, get a default (say 0.4) passed to constructor -->

    <com.mypackage.MyCustomView />

</LinearLayout>

1 ответ

Решение

Проведя дополнительные исследования, я понял, что значения по умолчанию могут быть установлены в конструкторе для View сам.

public class MyCustomView extends View {

    private float mCustomAttribute;

    public MyCustomView(Context context, AttributeSet attrs) {
        super(context, attrs);

        TypedArray array = context.obtainStyledAttributes(attrs,
            R.styleable.MyCustomView);
        mCustomAttribute = array.getFloat(R.styleable.MyCustomView_customAttribute,
            0.4f);

        array.recycle();
    }
}

Значение по умолчанию также можно загрузить из файла ресурсов xml, который может варьироваться в зависимости от размера экрана, ориентации экрана, версии SDK и т. Д.

Другие вопросы по тегам