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?

Y sí, también tengo lugares que quiero hacer esto que están más involucrados que sólo mensajes.

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

  • ¿Cómo obtener el contenido de una pestaña dentro de TabHost?
  • Cómo obtiene "android:" valores de etiqueta en una vista personalizada
  • Cómo limitar la altura de la vista desplegable de Spinner en Android
  • ¿Es útil utilizar el diseño completo de WebView en la aplicación nativa de Android?
  • ¿Cómo agregar una línea horizontal 1px encima de la vista de la imagen en un diseño relativo?
  • Prioridad de diseño de Android
  • ActionBarSherlock & HoloEverywhere - Forzar el desbordamiento?
  • Menú círculo Android como notas de captura
  • ¿Hay una manera de comprobar si androide WindowManager ya contiene una vista?
  • Escalado de los padres pero no de los niños
  • View.setPadding acepta sólo en px, ¿hay de todos modos setPadding en dp?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.