Android: problemi di layout XML
-
27-09-2019 - |
Domanda
Ho cercato di creare un RelativeLayout con un colpo di testa, il corpo (lista) e piè di pagina. Voglio l'intestazione di essere di sopra di tutto (allineato alla parte superiore), il corpo (lista) di essere sotto l'intestazione (durante lo scorrimento) e il piè di pagina (allineato verso il basso) per essere sopra il corpo (lista) - solo quando è visibile.
sono riuscito a farlo perfettamente quando si tratta di come le cose sembrano ma a quanto pare il layout XML è la causa per i problemi ho avuto quando si clicca su listItems ( vedi qui , e qui ).
Al fine di risolvere i problemi, ho dovuto avvolgere il ListView con LinearLayout e lo metto tra l'intestazione e il piè di pagina (in XML). Questo risolve il ListItems cliccando problemi ma crea un nuovo problema - le pelli piè di pagina l'ultimo elemento ListView, anche se l'elenco non andare sotto l'intestazione quando si scorre verso il basso
.Sono praticamente disperata qui: \
Questo è il XML che crea il layout perfetto, ma fa sì che le questioni clic su Elenco Articolo:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#ffffff"
>
<RelativeLayout
android:background="@drawable/top_background"
android:layout_width="fill_parent"
android:layout_height="50dip"
android:id="@+id/top_control_bar"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:text="Droidmarks"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/add_bookmark"
android:textSize="20dip"
android:textColor="#a0cb26"
android:shadowColor="#7a9b1b"
android:shadowRadius="5"
android:layout_marginLeft="5dip"
android:gravity="left|center" />
<Button
android:id="@+id/add_bookmark"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center"
android:layout_alignParentRight="true"
android:text="Add"
/>
</RelativeLayout>
<LinearLayout
android:id="@+id/bottom_control_bar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@drawable/top_background"
android:visibility="invisible"
>
<Button
android:id="@+id/test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center"
android:layout_alignParentRight="true"
android:text="Add"
/>
</LinearLayout>
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/top_control_bar"
android:layout_above="@id/bottom_control_bar"
android:drawSelectorOnTop="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:cacheColorHint="#ffffff"
android:listSelector="@drawable/selected_item"
/>
<TextView android:id="@android:id/empty" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No Bookmarks found. You can add one by clicking the star."
android:layout_below="@id/top_control_bar" android:layout_above="@id/bottom_control_bar" />
</RelativeLayout>
Questo è il XML che nascondono l'ultima voce di elenco, ma risolve i problemi di clic:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#ffffff"
>
<RelativeLayout
android:background="@drawable/top_background"
android:layout_width="fill_parent"
android:layout_height="50dip"
android:id="@+id/top_control_bar"
android:layout_alignParentTop="true"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:text="Droidmarks"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/add_bookmark"
android:textSize="20dip"
android:textColor="#a0cb26"
android:shadowColor="#7a9b1b"
android:shadowRadius="5"
android:layout_marginLeft="5dip"
android:gravity="left|center" />
<Button
android:id="@+id/add_bookmark"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center"
android:layout_alignParentRight="true"
android:text="Add"
/>
</RelativeLayout>
<LinearLayout
android:id="@+id/listArea"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_below="@id/top_control_bar"
>
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="false"
android:cacheColorHint="#ffffff" />
<TextView android:id="@android:id/empty" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No Bookmarks found. You can add one by clicking the star." />
</LinearLayout>
<LinearLayout
android:id="@+id/bottom_control_bar"
android:layout_above="@id/listArea"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@drawable/top_background"
android:orientation="horizontal"
android:visibility="visible"
>
<Button
android:id="@+id/test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center"
android:layout_alignParentRight="true"
android:text="Add"
/>
</LinearLayout>
</RelativeLayout>
Apprezzerei tutto l'aiuto in qualche modo trovare una soluzione per entrambi i problemi!
Grazie!
Soluzione
Posso chiedere perché si sta utilizzando un RelativeLayout a tutti per il contenitore? Sembra un luogo perfetto per basta usare un LinearLayout con una zona centrale ponderata (ListView) che è impostato per prendere tutta l'area che rimane dopo l'intestazione wrap_height-set e piè di pagina. RelativeLayouts sono grandi per semplificare i layout profondamente nidificate che contengono entrambi gli elementi orizzontali e verticali, ma il vostro strato esterno qui contiene solo 3 elementi verticali in ogni modo, in modo da andare con un LinearLayout con orientation:vertical
a meno che non mi manca qualcosa qui.
EDIT: In breve, provate questo; questo dovrebbe dare un colpo di testa ad altezza fissa, un piè di pagina involucro di altezza, e la zona centrale occupare tutto lo spazio rimanente. Assicurarsi che il layout esterno è impostato su altezza fill_parent
e la zona centrale è impostato su un'altezza fissa, ma con un layout_weight="1"
. Mi piace usare "0px" per la layout_height base quando sto usando layout_weight solo per tenerlo chiaro per me quando vado indietro e rileggere in un secondo momento.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#ffffff"
>
<RelativeLayout
android:background="@drawable/top_background"
android:layout_width="fill_parent"
android:layout_height="50dip"
android:id="@+id/top_control_bar"
> <!-- snip - inner contents unchanged -->
</RelativeLayout>
<LinearLayout
android:id="@+id/listArea"
android:layout_width="fill_parent"
android:layout_height="0px"
android:layout_weight="1"
android:orientation="horizontal"
><!-- snip - inner contents unchanged -->
</LinearLayout>
<LinearLayout
android:id="@+id/bottom_control_bar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/top_background"
android:orientation="horizontal"
android:visibility="visible"
><!-- snip - inner contents unchanged -->
</LinearLayout>
</LinearLayout>