2013-04-24 12 views
7

Ho una finestra di dialogo che ha un elenco (un gruppo di TextView s all'interno di un LinearLayout) all'interno di un ScrollView. La disposizione è la seguente:Scrollview rende le viste in basso che scompaiono in una finestra di dialogo

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

    <ProgressBar 
     android:id="@+id/delete_progress" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:visibility="gone" /> 

    <ScrollView 
     android:id="@+id/filename_scroll" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <LinearLayout 
      android:id="@+id/filename_container" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" > 
     </LinearLayout> 
    </ScrollView> 

    <View 
     android:id="@+id/horisontal_separator" 
     android:layout_width="fill_parent" 
     android:layout_height="1dp" 
     android:background="@android:color/darker_gray" /> 

    <LinearLayout 
     android:id="@+id/button_container" 
     android:layout_width="match_parent" 
     android:layout_height="48dp" > 

     <Button 
      android:id="@+id/load_button" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:text="@string/button_load" 
      android:gravity="center" 
      android:layout_weight="1" /> 

     <View 
      android:layout_width="1dp" 
      android:layout_height="fill_parent" 
      android:background="@android:color/darker_gray" /> 

     <Button 
      android:id="@+id/delete_button" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:text="@string/button_delete" 
      android:gravity="center" 
      android:layout_weight="1" /> 
    </LinearLayout> 

</LinearLayout> 

Ecco come si presenta con solo pochi elementi della lista: A few items on the list

Ma quando c'è più di può andare bene sullo schermo (e non c'è reale necessità di scorrere) , i miei pulsanti vengono spinti sotto lo schermo. Quando si scorre tutta la strada fino in fondo, sembra che questo: A lot of items on the list

Ho bisogno della LinearLayout che contiene i pulsanti di rimanere come piè di pagina, non dovrebbe scorrere da nessuna parte e ovviamente non scompaiono. Ho provato a giocherellare con le altezze ei pesi del layout, ma senza risultati.

+0

Hai provato a impostare ListView su un'altezza fissa, ad esempio 200dip? – Demonick

+0

Non ho un vero 'ListView', ma cambiare l'altezza di' LinearLayout' non fa differenza. E se cambio l'altezza di 'ScrollView', semplicemente spinge di nuovo i pulsanti. – j0ntech

risposta

19

tenta di modificare in ScrollView

<ScrollView 
    android:id="@+id/filename_scroll" 
    android:layout_width="match_parent" 
    android:layout_weight="1" 
    android:layout_height="0dp" > 
+0

Funziona perfettamente. Puoi spiegare perché e come sta succedendo? –

+0

Questo ha funzionato anche per me! Mi piacerebbe una spiegazione sul perché questo funziona. – Vinnie

0

Penso che si dovrebbe parlare layout_height del Scrollview esplicitamente come

<ScrollView 
    android:id="@+id/filename_scroll" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > ////say android:layout_height="50dp" 

    <LinearLayout 
     android:id="@+id/filename_container" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 
    </LinearLayout> 
</ScrollView> 

così. E un'altra opzione è, introdurre un componente esterno come il layout di una tabella specificando esplicitamente il layout_height e includere la propria scrollview così com'è.

spero che funziona

+0

Non voglio specificare nulla esplicitamente, in quanto dovrebbe cambiare le dimensioni in base al numero di elementi nell'elenco. Ad ogni modo, la risposta di umesh ha fatto esattamente quello di cui avevo bisogno. – j0ntech

+0

I suoi lavori per me. Lo scrollview funziona come un contenitore e sto usando contenuti dinamici. più di 20nos. Ad ogni modo, contento che lo capisca –

0

Usa sotto il layout xml per il dialogo personalizzata che si desidera visualizzare,

<FrameLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <ListView 
     android:id="@+id/gameList" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="30dip" /> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" > 

     <Button 
      android:id="@+id/load" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Load" /> 

     <Button 
      android:id="@+id/delete" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Delete" /> 
    </LinearLayout> 
</FrameLayout> 

e chiamarlo in questo modo dalla tua file di classe,

>  Button getList = (Button) findViewById(R.id.getList); 
>  getList.setOnClickListener(new View.OnClickListener() { 
>  
>    @Override 
>  public void onClick(View v) { 
>  // TODO Auto-generated method stub 
>  final Dialog listDialog = new Dialog(MainActivity.this); 
>  listDialog.setTitle("Load a game"); 
>  listDialog.setContentView(R.layout.custom_dialog); 
>  
>  ListView gameList = (ListView) listDialog.findViewById(R.id.gameList); 
>  gameList.setAdapter(new ArrayAdapter<String>   (MainActivity.this,android.R.layout.simple_list_item_1,new String[] {"your array" })); 
>  
>  Button dismiss = (Button) listDialog.findViewById(R.id.load); 
>  dismiss.setOnClickListener(new View.OnClickListener() { 
>  
>   @Override 
>   public void onClick(View v) { 
>    // TODO Auto-generated method stub 
>    listDialog.dismiss(); 
>      } 
>   }); 
>  
>   listDialog.show(); 
>  
>   } }); 
+0

Quella roba di 'marginBottom' è piuttosto intelligente, ma ho già avuto la risposta. Inoltre, il mio layout originale non aveva nemmeno un 'ListView'. Hai letto anche la domanda? – j0ntech

+0

Ciao jOntech, ho già letto e vi suggerisco la soluzione alternativa per questo. E questo esempio serve al tuo scopo ed è in esecuzione sample.Did lo controlli? –

Problemi correlati