Imaginemos que estamos desarrollando un componente compuesto basado en LinearLayout. Entonces, creamos una clase como esta:
public class SomeView extends LinearLayout {
public SomeView(Context context, AttributeSet attrs) {
super(context, attrs);
setOrientation(LinearLayout.VERTICAL);
View.inflate(context, R.layout.somelayout, this);
}
}
Si usaremos LinearLayout
como raíz de somelayout.xml
, tendremos un nivel de vista adicional, por lo que usaremos la etiqueta merge:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Some text"
android:textSize="20sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Some other text"/>
</merge>
Pero en la pestaña Vista previa en la fusión IDE siempre actúa como FrameLayout, y veremos algo así:
(Es Android Studio, Intellij IDEA es lo mismo, sobre Eclipse, no lo sé)
La vista previa acelera mucho los diseños en desarrollo, es triste perder una gran ayuda incluso para algunos diseños. Puede haber una manera de especificar, ¿cómo Vista previa debe interpretar la merge
etiqueta en un diseño particular?
Respuestas:
Hay un nuevo atributo de herramientas parentTag ( agregado en Android Studio 2.2 ) que puede usar para especificar el tipo de diseño para una etiqueta de fusión, lo que hará que el diseño se procese correctamente en la vista previa del editor de diseño.
Entonces, usando tu ejemplo:
Nota : Ambos
android:layout_width
yandroid:layout_height
deben especificarse para que el diseño se muestre correctamente en el editor.fuente
<com.yourpackage.yourcustomview id="@+id/my_cust_view" android:layout_width="match_parent" android:layout_height="match_parent"/>
Editar: respuesta desactualizada. Ver la respuesta de starkej2.
Android Studio 0.5.8 agregó soporte para herramientas: showIn. Al usarlo, es posible obtener una vista previa de los diseños de <fusión>.
http://tools.android.com/recent/androidstudio058released
layout / layout_merge.xml con herramientas: showIn:
layout / simple_relativelayout.xml con include:
fuente
También es posible usar la clase personalizada como padre en lugar de fusionar como
Y luego inflar directamente este diseño y emitir la vista de resultados a
SomeView
. Android Studio verificará directamente la clase principal deSomeView
y manejará la vista previa comoLinerLayout
. Puede usar elonFinishInflate()
método enSomeView
para enlazar vistas porfindViewById()
. El beneficio de esta solución es que puede poner todas las definiciones de diseño o definición de estilo directamente en el archivo de diseño, no puede usar el método comosetOrientation()
en el código.fuente