studio programacion para herramientas fundamentos desarrollo con avanzado aplicaciones android attributes custom-controls

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.