Да. Краткое руководство:
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 />
для своего представления, который содержит все ваши настраиваемые атрибуты (здесь только один). Я так и не нашел полного списка возможных типов, так что, думаю, вам нужно поискать в источнике. Типы, которые я знаю, - это ссылка (на другой ресурс), цвет, логическое значение, размер, число с плавающей запятой, целое число и строка . Они довольно понятны
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()
чтобы изменить внешний вид соответствующим образом.