Android instanceof detectar todos los widgets?
Estoy intentando fijar una fuente a través de todos los TextView
's por LinearLayout
través de las LinearLayout
de LinearLayout
y using instanceof
.
El formulario actualmente consta de 4 TextView
y un Button
.
- Android OpenGL que extiende las excepciones de puntero nulo de GLSurfaceView
- Añadir más de dos vistas a ViewSwitcher
- Deshabilitar todas las vistas secundarias dentro del diseño
- Adición de vistas a un grupo de vistas de Android mediante programación
- ¿Cómo mover una vista en Android?
El siguiente código está detectando todas las View
s, incluso el Button
como TextView
?
/* Set fonts */ LinearLayout ll = (LinearLayout) findViewById(R.id.ll_screenincourse_wrapper); for (int i = 0; i < ll.getChildCount(); i++) { View v = ll.getChildAt(i); if (v instanceof TextView) { ((TextView) v).setTypeface(Fonts.get3dDumbFont(this)); } }
Si registro el nombre de clase de cada vista, devuelve el TextView y el Botón, así que sé que se están recuperando los controles correctos.
El problema es que las fuentes de Button y TextView se están configurando, y sólo quiero las de TextView
.
He encontrado un trabajo alrededor y que es hacer lo siguiente, pero estoy intrigado por qué el código anterior no funciona como se espera.
/* Set fonts */ LinearLayout ll = (LinearLayout) findViewById(R.id.ll_screenincourse_wrapper); for (int i = 0; i < ll.getChildCount(); i++) { View v = ll.getChildAt(i); if (v.getClass().getName().contains("TextView")) { ((TextView) v).setTypeface(Fonts.get3dDumbFont(this)); } }
¿Es porque tanto Button como TextView son del tipo View
? Si es así, ¿cuál sería la manera correcta de hacer esto?
Cualquier ayuda apreciada, gracias. Ricky.
- Android: Tablerow mezclado con columnas y texto multilínea
- Android addView en hilo de fondo
- ¿Cómo posiciono el cuadro de diálogo personalizado en coordenadas específicas?
- Stackoverflow error en la vista
- Animación individual - vistas múltiples
- ¿Cómo puede detectar la vista que está pasando cuando realiza un evento táctil?
- Split motion events - acepta entradas simultáneamente a varias vistas
- Notificación de pantalla de bloqueo de Android Vista personalizada con ripple y doble toque
En realidad, Button es una subclase de TextView! Es por eso que lo ves como un TextView (también es un TextView).
http://developer.android.com/reference/android/widget/Button.html
public class Button extends TextView
Usted podría hacer un segundo si instanceof
para excluir botones o utilizar
if (v.getClass() == TextView.class)
Pero esto no coincidirá con ninguna otra subclase de TextView (si las usa).
Es simple
La clase Button extiende la clase TextView
Revise la documentación