Vamos imaginar que estamos desenvolvendo componentes compostos baseados em LinearLayout. Então, criamos classes 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);
}
}
Se usarmos LinearLayout
como raiz somelayout.xml
, teremos um nível de visualização extra; portanto, usaremos a tag de mesclagem:
<?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>
Mas na guia Visualizar na mesclagem do IDE sempre atua como FrameLayout, e veremos algo assim:
(É o Android Studio, o Intellij IDEA é o mesmo, sobre o Eclipse, eu não sei)
A visualização acelera muito o desenvolvimento de layouts, é triste perder uma ajuda tão boa, mesmo para alguns layouts. Pode haver uma maneira de especificar, como a Visualização deve interpretar a merge
tag em um layout específico?
Respostas:
Há um novo atributo de ferramentas parentTag ( adicionado no Android Studio 2.2 ) que você pode usar para especificar o tipo de layout para uma marca de mesclagem, que fará com que o layout seja renderizado corretamente na visualização do editor de layout.
Então, usando o seu exemplo:
Nota : Ambos
android:layout_width
eandroid:layout_height
devem ser especificados para que o layout seja exibido corretamente no editor.fonte
<com.yourpackage.yourcustomview id="@+id/my_cust_view" android:layout_width="match_parent" android:layout_height="match_parent"/>
Editar: resposta desatualizada. Veja a resposta de starkej2.
O Android Studio 0.5.8 adicionou suporte para ferramentas: showIn. Ao usá-lo, é possível visualizar layouts <mesclagem>.
http://tools.android.com/recent/androidstudio058released
layout / layout_merge.xml com ferramentas: showIn:
layout / simple_relativelayout.xml com include:
fonte
Também é possível usar a classe personalizada como pai em vez de mesclar como
E depois inflar diretamente esse layout e converter a exibição de resultado em
SomeView
. O Android studio verificará diretamente a classe paiSomeView
e lidará com a visualização comoLinerLayout
. Você pode usar oonFinishInflate()
método noSomeView
para vincular visualizações porfindViewById()
. O benefício desta solução é que você pode colocar todas as definições de layout ou de estilo diretamente no arquivo de layout, não pode usar o método comosetOrientation()
no código.fonte