Android – пользовательский интерфейс с настраиваемыми атрибутами

Я знаю, что возможно создать пользовательский элемент пользовательского интерфейса (через View или конкретное расширение элемента UI). Но возможно ли определить новые свойства или атрибуты для вновь созданных элементов пользовательского интерфейса (я имею в виду не унаследованный, но совершенно новый, чтобы определить какое-то конкретное поведение, с которым я не могу справиться с дефолтным атрибутом или атрибутами)

Например элемент мой пользовательский элемент:

<com.tryout.myCustomElement android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Element..." android:myCustomValue=<someValue> /> 

Так можно ли определить MyCustomValue ?

Спасибо

Solutions Collecting From Web of "Android – пользовательский интерфейс с настраиваемыми атрибутами"

Да. Краткое руководство:

1. Создайте атрибут XML

Создайте новый файл XML внутри /res/values/attrs.xml , с атрибутом и его типом

 <?xml version="1.0" encoding="UTF-8"?> <resources> <declare-styleable name="MyCustomElement"> <attr name="distanceExample" format="dimension"/> </declare-styleable> </resources> 

В основном вам нужно настроить один <declare-styleable /> для вашего представления, содержащий все ваши пользовательские атрибуты (здесь только один). Я никогда не нашел полный список возможных типов, поэтому вам нужно посмотреть на источник, который я предполагаю. Типы, которые я знаю, являются ссылкой (на другой ресурс), цветом, булевым, размерным, float, integer и string . Они довольно понятны

2. Используйте атрибуты в макете

Это работает так же, как вы делали выше, за одним исключением. Для вашего пользовательского атрибута требуется собственное пространство имен XML.

 <com.example.yourpackage.MyCustomElement xmlns:customNS="http://schemas.android.com/apk/res/com.example.yourpackage" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Element..." customNS:distanceExample="12dp" /> 

Довольно прямо.

3. Используйте значения, которые вы получите

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

 public MyCustomElement(Context context, AttributeSet attrs) { super(context, attrs); TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyCustomElement, 0, 0); try { distanceExample = ta.getDimension(R.styleable.MyCustomElement_distanceExample, 100.0f); } finally { ta.recycle(); } // ... } 

distanceExample – это переменная частного члена в этом примере. TypedArray получил массу других вещей для анализа других типов ценностей.

Вот и все. Используйте проанализированное значение в вашем View чтобы изменить его, например, используйте его в onDraw() чтобы соответствующим образом изменить внешний вид.

В папке res / values ​​создайте attr.xml. Там вы можете определить свои атрибуты:

 <declare-styleable name=""> <attr name="myCustomValue" format="integer/boolean/whatever" /> </declare-styleable> 

Когда вы хотите использовать его в своем файле макета, вам нужно добавить

 xmlns:customname="http://schemas.android.com/apk/res/your.package.name" 

И затем вы можете использовать значение с пользовательским customname:myCustomValue=""

Да, вы можете. Просто используйте <resource> .
как это:

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="CodeFont" parent="@android:style/TextAppearance.Medium"> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:textColor">#00FF00</item> <item name="android:typeface">monospace</item> </style> </resources> 

Ссылка с официального сайта