Estou tentando há alguns dias tornar meus layouts mais eficientes, convertendo o uso de vários níveis de aninhados LinearLayouts
em um RelativeLayout
e encontrei alguns problemas para os quais não consegui encontrar uma solução alternativa ...
Eu pesquisei o grupo de iniciantes em Android e este site e não consegui encontrar nada que pudesse me ajudar a resolver o problema.
Eu li em um dos blogs que você pode combinar layouts com mesclar e incluir tags. Portanto, o que tenho é um arquivo de layout principal com um RelativeLayout
elemento raiz. Dentro disso, tenho 5 tags de inclusão que fazem referência a 5 arquivos de layout xml diferentes, cada um com um elemento de mesclagem para a raiz (todos os meus arquivos de mesclagem são iguais, exceto pelos ids neles).
Estou tendo dois problemas, que explicarei depois de postar uma versão simplificada do meu código de layout:
Arquivo de layout principal de amostra:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/translucent_gray" >
<include
android:id="@+id/running_gallery_layout_id"
layout="@layout/running_gallery_layout" />
<include
android:id="@+id/recent_gallery_layout_id"
layout="@layout/recent_gallery_layout"
android:layout_below="@id/running_gallery_layout_id" />
<include
android:id="@+id/service_gallery_layout_id"
layout="@layout/service_gallery_layout"
android:layout_below="@id/recent_gallery_layout_id" />
<include
android:id="@+id/process_gallery_layout_id"
layout="@layout/process_gallery_layout"
android:layout_below="@id/service_gallery_layout_id" />
</RelativeLayout>
Arquivo de mesclagem incluído:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
style="@style/TitleText"
android:id="@+id/service_gallery_title_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:text="@string/service_title" />
<Gallery
android:id="@+id/service_gallery_id"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_below="@id/service_gallery_title_text_id" />
<TextView
style="@style/SubTitleText"
android:id="@+id/service_gallery_current_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/service_gallery_title_text_id"
android:layout_above="@id/service_gallery_id" />
</merge>
Estou tendo dois problemas:
1) Os android:layout_*
atributos parecem ser ignorados quando usados na tag de inclusão e todos os layouts mesclados são exibidos uns sobre os outros. De acordo com esta postagem ( http://developer.android.com/resources/articles/layout-tricks-reuse.html ) "qualquer android:layout_*
atributo pode ser usado com a <include />
tag"
2) Como não consegui fazer isso funcionar, decidi tentar adicionar um android:layout_below
atributo ao primeiro TextView
item em cada arquivo de layout de mesclagem, o que significa que cada arquivo de mesclagem faria referência a um id de outro arquivo de layout de mesclagem ... Na maioria das vezes isso realmente funcionou e meu layout parece bom. No entanto, recebo um erro em um dos android:layout_below
atributos dizendo que ele não consegue encontrar o id que eu especifiquei ... Verifiquei duas ou três vezes os ids para ter certeza de que estavam corretos. A parte mais estranha é que usei o AutoFill
recurso para colocar o id no atributo em primeiro lugar.
Se alguém tiver alguma sugestão ou solução alternativa, terei todo o gosto em experimentá-los. Além disso, se alguém puder pensar em uma maneira de eu ter apenas um arquivo de layout xml mesclado em vez de 5, isso seria muito apreciado. Não consegui encontrar uma maneira de fazer isso porque preciso ter acesso a cada item nos arquivos de layout de mesclagem em tempo de execução ...