Si. Breve guía:
1. Cree un atributo XML
Cree un nuevo archivo XML dentro /res/values/attrs.xml
, con el atributo y su tipo
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<declare-styleable name="MyCustomElement">
<attr name="distanceExample" format="dimension"/>
</declare-styleable>
</resources>
Básicamente, debe configurar uno <declare-styleable />
para su vista que contenga todos sus atributos personalizados (aquí solo uno). Nunca encontré una lista completa de posibles tipos, así que supongo que debes buscar en la fuente uno. Los tipos que conozco son referencia (a otro recurso), color, booleano, dimensión, flotante, entero y cadena . Son bastante autoexplicativos
2. Utilice los atributos en su diseño.
Eso funciona de la misma manera que lo hizo anteriormente, con una excepción. Su atributo personalizado necesita su propio espacio de nombres 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"
/>
Muy claro.
3.Haz uso de los valores que te pasan
Modifique el constructor de su vista personalizada para analizar los valores.
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
es una variable miembro privada en este ejemplo. TypedArray
Tengo muchas otras cosas para analizar otros tipos de valores.
Y eso es. Utilice el valor analizado en su View
para modificarlo, por ejemplo, úselo onDraw()
para cambiar el aspecto en consecuencia.