Vista personalizada de Android (TextView + Button + algunos comportamientos personalizados)?
Esto debería ser muy fácil de hacer, pero de alguna manera después de unos 15 minutos de búsqueda todavía no puedo obtener la respuesta:
Quiero hacer una vista personalizada de Android combinando un TextView y un botón, además de algunos comportamientos / métodos personalizados, digamos que al hacer clic en el botón debe cambiar el TextView a "Hello, world!".
- ¿Cómo hacer varias vistas del mismo ancho?
- El teclado de Android se oculta, mostrando el espacio en blanco a continuación, después de regresar del protector de pantalla
- No puedo encontrar la causa de mi accidente con este seguimiento de pila
- Android: obteniendo el ancho de un botón que se establece en wrap_content
- Android: Cómo agregar un botón mediante programación para verlo
Sé que voy a tener que ampliar la clase View, y diseñar el diseño en un XML, a continuación, hacer algo de magia para vincular los dos. ¿Podría decirme cuál es la magia? Sé cómo hacer esto en una actividad, pero no en una vista personalizada.
EDITADO Ok, así que descubrí que necesito usar un Inflater para inflar mi clase con las vistas secundarias definidas en un diseño. Esto es lo que tengo:
public class MyView extends View { private TextView text; private Button button; public MyView(Context context, AttributeSet attrs) { super(context, attrs); View.inflate(context, R.layout.myview, null); } @Override protected void onFinishInflate() { super.onFinishInflate(); text = (TextView) findViewById(R.id.text); button = (Button) findViewById(R.id.button); } }
Sin embargo, las vistas secundarias de text
y button
eran nulas. ¿Alguna idea? (El XML es muy simple sin ninguna modificación de lujo, sólo agarré un TextView y un botón de la barra de herramientas de eclipse y tirar.)
- Max 9000 caracteres en Android TextView?
- Cómo crear un botón que contiene varias vistas?
- Android ignorando mi setWidth () y setHeight ()
- DispatchKeyEvent desde Service
- Añadir botón en la vista personalizada en Android
- Obtener la vista de los padres desde un diseño
- Fragmento de Android en el botón Método
- Android: ¿Cómo evito que el teclado suave empuje mi vista hacia arriba?
Ok, así que la respuesta a mi propia pregunta es: (i) ir a cenar, (ii) se extiende LinearLayout
lugar de View
, esto lo convierte en un ViewGroup
y por lo tanto se puede pasar al inflate(...)
método, pero no tienen que anular el onLayout(...)
. El código actualizado sería:
public class MyView extends LinearLayout { private TextView text; private Button button; public MyView(Context context, AttributeSet attrs) { super(context, attrs); View.inflate(context, R.layout.myview, this); } @Override protected void onFinishInflate() { super.onFinishInflate(); text = (TextView) findViewById(R.id.text); button = (Button) findViewById(R.id.button); } }
- Tema personalizado para Media Volume Controller (lo que se llame) de Android?
- Vista web de Android en la mitad de la pantalla