Вопрос по android – Android: атрибуты по умолчанию для пользовательских представлений

8

У меня есть пользовательское представление, которое расширяет один из классов платформы. НаиболееViews в Android имеют определенные атрибуты по умолчанию (например,Button быть кликабельным, который устанавливаетсяandroid:clickable="true").

Как предоставить настройки по умолчанию для моего пользовательского представления?

Я не спрашиваю о том, как определить пользовательские атрибуты. Я уже делаю это. То, что я хочу, это иметь немного По умолчанию определен для этих атрибутов, так что представление может быть добавлено в файл макета без необходимости устанавливать некоторые дополнительные свойства. Karakuri

Ваш Ответ

3   ответа
1

иль, в котором вы используете представление.

источник:http: //developer.android.com/guide/topics/resources/style-resource.htm

Использование тега style - это просто ярлык для настройки отдельных атрибутов в файле макета - это не то, чего я пытаюсь достичь. Я хочу иметь внешний вид / атрибуты по умолчанию, и тогда тот, кто использует мое настраиваемое представление, может использовать тег стиля для дальнейшей его модификации. Подумайте об этом так: когда вы добавляете TextView к макету, он имеет значения по умолчанию для размера текста, цвета текста и т. Д. Они должны быть откуда-то, потому что вам не нужно указывать стиль или что-то еще. Атрибуты, которые вы меняете, или стиль, на который вы ссылаетесь, будут применяться к этим значениям по умолчанию. Karakuri
12

Рез / значения / attrs.xml:

<resources>
    <attr name="customViewStyle" type="reference" />
</resources>

Рез / значения / styles.xml:

<resources>
    <style name="AppTheme" parent="@android:style/Theme.Light">
        <item name="android:background">@drawable/bg_light</item>
        <item name="customViewStyle">@style/CustomView</item>
    </style>

    <style name="CustomView">
        <item name="android:clickable">true</item>
        <item name="android:focusable">true</item>
        <item name="android:focusableInTouchMode">true</item>
    </style>
</resources>

Затем все, что вам нужно сделать, это установить тему в манифесте на AppTheme. Это также работает со стандартными виджетами, использующимиandroid:[widget]Style на местеcustomViewStyle в определении AppTheme.

@ cottonBallPaws, следующие указали мне в правильном направлении: Stackoverflow.com / а / 31505624/5166250 Travis
Как это применимо к вашему мнению? Где customViewStyle связан с вашей реализацией View? cottonBallPaws
0

AttributeSet аргумент и создайте свой собственный модифицированный AttributeSet для передачи конструктору суперкласса.

EDIT: еще проще, просто вызовите конструктор View подклассаsetClickable и т.д., чтобы изменить значения по умолчанию на то, что вы хотите.

Это то, что я сделал изначально. Проблема в том, что если другой разработчик использует мое пользовательское представление и вставит clickable = "false" в свой xml, тогда мой вызовsetClickable() подрывает его программирование. (Возможно, он планирует сделать его кликабельным только после того, как пользователь что-то сделал, например, поставил галочку.) Даже еслиI ожидаю, что это будет кликабельно, другие - нет, поэтому я бы хотел обеспечить поведение по умолчанию, не прибегая к таким внутренним вызовам. В противном случае мне нужен способ прочитать все атрибуты для представления, не только пользовательские, которые я определил в attrs. Karakuri

Похожие вопросы