una - interfaz xml android
Android: interfaz de usuario personalizada con atributos personalizados (3)
Sé que es posible crear un elemento de IU personalizado (a través de la vista o la extensión de elemento de IU específico). Pero, ¿es posible definir nuevas propiedades o atributos para los elementos de la interfaz de usuario recién creados (es decir, no heredados, pero nuevos para definir un comportamiento específico que no puedo manejar con propiedades o atributos predeterminados)?
por ejemplo, elemento mi elemento personalizado:
<com.tryout.myCustomElement
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Element..."
android:myCustomValue=<someValue>
/>
Entonces, ¿es posible definir MyCustomValue ?
Gracias
En su carpeta res / values, cree attr.xml. Allí puedes definir tus atributos:
<declare-styleable name="">
<attr name="myCustomValue" format="integer/boolean/whatever" />
</declare-styleable>
Cuando quiera usarlo en su archivo de diseño, debe agregar
xmlns:customname="http://schemas.android.com/apk/res/your.package.name"
y luego puedes usar el valor con customname:myCustomValue=""
Sí, puede. Solo use la etiqueta <resource>
.
Me gusta esto:
<?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>
Sí. Guía breve:
1. Crea un atributo XML
Cree un nuevo archivo XML dentro de /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 un <declare-styleable />
para su vista que contenga todos sus atributos personalizados (aquí solo uno). Nunca encontré una lista completa de tipos posibles, por lo que debes buscar la fuente para uno, supongo. Los tipos que conozco son referencia (a otro recurso), color, booleano, dimensión, flotante, entero y cadena . Son bastante autoexplicativos
2. Usa los atributos en tu 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 obtienes
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 de miembro privada en este ejemplo. TypedArray
tiene muchas otras cosas para analizar otros tipos de valores.
Y eso es. Use el valor analizado en su View
para modificarlo, por ejemplo, onDraw()
en onDraw()
para cambiar el aspecto en consecuencia.