2013-07-27 16 views
8

Ho un listview che sarà riempito con AsyncTask e sul bordo inferiore della app ho bisogno di mostrare un layout sovrapposizione fisso in questo modo:Come creare un layout di sovrapposizione su un listview

enter image description here

Ma non riesco a capire come posso farlo in xml? Questo è il mio layout.xml presente:

<?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="vertical"> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <!-- Probably I need to do something here --> 

</LinearLayout> 
+0

http://www.curious-creature.org/2009/03/01/android-layout-tricks-3-optimize-part-1/ Prendi questo :) –

risposta

9

Come suggerito da Daniel, utilizzare uno RelativeLayout perché consente di impilare i componenti (lo stesso con FrameLayout e SurfaceView). Il seguente codice vi darà il layout che si sta cercando:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<ListView 
    android:id="@+id/list" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:background="@color/transparentBlack" 
    android:layout_alignParentBottom="true" > 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/textView1" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="20dp" 
     android:text="Medium Text" 
     android:textColor="@color/white" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:layout_marginLeft="40dp" 
     android:text="Large Text" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textColor="@color/white" /> 

    </RelativeLayout> 

</RelativeLayout> 

Nel codice di cui sopra, i valori esadecimali dei colori utilizzati per transparentBlack è #95000000 e white è #ffffff.

Ecco un eccellente tutorial sulle basi del design dell'interfaccia utente in Android: Android User Interface Design: Layout Basics.

+1

Grazie funziona perfettamente! Leggerò il link che fornisci :) –

+1

Cosa succede se vuoi essere in grado di scorrere l'elemento più in basso sopra il pulsante di sovrapposizione? – l33t

+1

@ l33t Supponiamo che tu stia usando un 'ArrayList' per tenere gli oggetti lista. Aggiungi un elemento spaziatore 'vuoto' alla fine di questo elenco. In 'getView()' del tuo adattatore => quando (posizione == mArrayList.size-1), imposta l'altezza di 'convertView' sul tuo' overlay's' height => imposta la visibilità di convertView in 'View.INVISIBLE'. Non ho provato questo - quindi questo approccio potrebbe richiedere alcune modifiche. Se lo desideri, puoi modificare la mia risposta con la tua implementazione finale. – Vikram

2

Cambiare il layout genitore di RelativeLayout o FrameLayout e posizionare la vista fissata allo stesso livello del ListView (ma dopo la ListView)

Qualcosa di simile:

---> RelativeLayout 
    --> ListView 
    --> Any view as the fixed view 

È possibile quindi allineare la vista fissata al fondo dell'involucro RelativeLayout

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <!-- Here you should position the fixed view --> 
</RelativeLayout> 
+0

Puoi darmi qualche esempio di codice? –

Problemi correlati