Vista personalizada de múltiples vistas
Tengo un conjunto de puntos de vista que quiero utilizar siempre juntos. Un ejemplo de esto puede ser algo como:
<LinearLayout> <TextView /> <EditView /> </LinearLayout>
La vista de texto es un mensaje y la vista de edición es la respuesta. Me gustaría darle a esta combinación un nombre, y ser capaz de usar ese nombre para hacer pop en xml. Me encantaría que fuera una vista personalizada para poder ponerla muy bien en una clase y crear varias funciones de utilidad para ella. ¿Hay alguna manera de que pueda hacer eso? Sé que podría subclase LinearLayout y crear a los niños de forma dinámica en el código java, pero que me pierde la posibilidad de hacer fácilmente cambios a través de xml. ¿Hay una mejor ruta?
- ¿Resplandor de encargo del color del resplandor / del borde para ListView?
- Aliasing de un recurso de diseño con el mismo nombre sólo calificador de pantalla diferente
- ¿Dónde puedo encontrar el nuevo Inspector de diseño de Android Studio 2.2 Vista previa 1
- Comparación de componentes de la interfaz de usuario de Android y iPhone
- Poner appbarLayout en la parte inferior de la pantalla
Y sí, también tengo lugares que quiero hacer esto que están más involucrados que sólo mensajes.
- Cómo iniciar un servicio cuando .apk está instalado por primera vez
- Android: el atributo layout_marginRight no funciona en RelativeLayout
- Disposición específica del idioma para android
- Calificadores de recursos de Android -sw # dp vs -w # dp
- Android por qué este botón no se puede hacer clic
- Alinear dos botones horizontalmente
- Dibujar círculo HSV en tiempo de ejecución
- No se puede realizar una vista bidireccional con 2 filas
Este ejemplo es para un widget selector de números horizontal, pero es el mismo concepto.
Primero cree el diseño XML para su componente personalizado
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <Button android:id="@+id/btn_minus" android:layout_width="50dp" android:layout_height="wrap_content" android:text="-" /> <EditText android:id="@+id/edit_text" android:layout_width="75dp" android:layout_height="wrap_content" android:inputType="number" android:gravity="center" android:focusable="false" android:text="0" /> <Button android:id="@+id/btn_plus" android:layout_width="50dp" android:layout_height="wrap_content" android:text="+" /> </LinearLayout>
A continuación, cree la clase java
public class HorizontalNumberPicker extends LinearLayout { public HorizontalNumberPicker(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater inflater = LayoutInflater.from(context); inflater.inflate(R.layout.horizontal_number_picker, this); } }
Agregue cualquier lógica que usted necesite a esa clase de java, entonces usted puede apenas incluir el componente de encargo en su disposición de XML así:
<com.example.HorizontalNumberPicker android:id ="@+id/horizontal_number_picker" android:layout_width ="wrap_content" android:layout_height ="wrap_content" />
Consulta este enlace para obtener más información: http://developer.android.com/guide/topics/ui/custom-components.html#compound
Utilice los controles compuestos para ese propósito. Hay un montón de ejemplos y tutoriales sobre él. Buena suerte )
Ponga ese XML en un archivo XML de diseño e infle la vista usando un inflador cuando lo desee.
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(R.layout.some_id, parent, false);
Una vez que tenga la vista, puede escribir una clase de utilidad que acepte esta vista y realice operaciones en ella. Recupere el texto y edite la vista usando findViewById()
o almacenando las referencias a esas otras vistas usando el patrón ViewHolder
- Android obtiene un cursor sólo con contactos que tienen un correo electrónico listado> android 2.0
- Estilos de widgets personalizados de Android: cómo colocarlos en un espacio de nombres?