programacion - ¿Cómo usar el atributo android estándar: texto en mi vista personalizada?
manual android studio avanzado (2)
Escribí una vista personalizada que extiende RelativeLayout
. Mi vista tiene texto, por lo que quiero usar el estándar android:text
sin la necesidad de especificar un <declare-styleable>
y sin usar un espacio de nombre personalizado xmlns:xxx
cada vez que uso mi vista personalizada.
este es el xml donde uso mi vista personalizada:
<my.app.StatusBar
android:id="@+id/statusBar"
android:text="this is the title"/>
¿Cómo puedo obtener el valor del atributo? Creo que puedo obtener el atributo android: text con
TypedArray a = context.obtainStyledAttributes(attrs, ???);
pero ¿qué es ???
en este caso (sin un styleable en attr.xml)?
utilizar esta:
public YourView(Context context, AttributeSet attrs) {
super(context, attrs);
int[] set = {
android.R.attr.background, // idx 0
android.R.attr.text // idx 1
};
TypedArray a = context.obtainStyledAttributes(attrs, set);
Drawable d = a.getDrawable(0);
CharSequence t = a.getText(1);
Log.d(TAG, "attrs " + d + " " + t);
a.recycle();
}
espero que tengas una idea
EDITAR
Otra forma de hacerlo (con la especificación de un estilo de declaración, pero sin tener que declarar un espacio de nombre personalizado) es la siguiente:
attrs.xml:
<declare-styleable name="MyCustomView">
<attr name="android:text" />
</declare-styleable>
MyCustomView.java:
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView);
CharSequence t = a.getText(R.styleable.MyCustomView_android_text);
a.recycle();
Esta parece ser la forma genérica de Android de extraer atributos estándar de vistas personalizadas.
Dentro de la API de Android, usan una clase interna R.styleable para extraer los atributos estándar y no parecen ofrecer otras alternativas de uso de R.styleable para extraer atributos estándar.
Publicación original
Para asegurarse de obtener todos los atributos del componente estándar, debe usar lo siguiente:
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TextView);
CharSequence t = a.getText(R.styleable.TextView_text);
int color = a.getColor(R.styleable.TextView_textColor, context.getResources().getColor(android.R.color.darker_gray)); // or other default color
a.recycle();
Si desea atributos de otro componente estándar simplemente cree otro TypedArray.
Consulte http://developer.android.com/reference/android/R.styleable.html para obtener detalles de las TypedArrays disponibles para los componentes estándar.