2013-04-24 7 views
7

Mam okno dialogowe z listą (kilka s wewnątrz LinearLayout) wewnątrz ScrollView. Układ jest w następujący sposób:Scrollview powoduje, że dolne widoki znikają w oknie dialogowym

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

Wygląda na to tylko kilka pozycji na liście: A few items on the list

Ale kiedy chodzi o coś więcej, niż może zmieścić się na ekranie (a nie rzeczywiste potrzeby przewijania) moje przyciski zostaną zepchnięte pod ekran. Podczas przewijania aż do dołu, wygląda to tak: A lot of items on the list

muszę LinearLayout zawierający przyciski, aby pobyt w stopce, to nie powinien przejść w dowolnym miejscu i oczywiście nie zniknie. Próbowałem manipulować wysokością i ciężarem układu, ale bezskutecznie.

+0

Czy próbowałeś ustawić ListView na stałą wysokość, na przykład 200dip? – Demonick

+0

Nie mam rzeczywistego 'ListView'there, ale zmiana wysokości' LinearLayout' nie robi różnicy. A jeśli zmienię wysokość 'ScrollView', to po prostu wypycha przyciski ponownie. – j0ntech

Odpowiedz

19

próbować zmienić w Scrollview

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

Działa to doskonale. Czy możesz wyjaśnić, dlaczego i jak to się dzieje? –

+0

To również zadziałało dla mnie! Chciałbym wyjaśnienie, dlaczego to działa. – Vinnie

0

myślę, że należy wspomnieć layout_height w Scrollview jest wyraźnie jak

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

takiego. Inną opcją jest wprowadzenie zewnętrznego komponentu, takiego jak układ tabeli, poprzez jawne określenie wysokości layout_height i uwzględnienie twojego scrollviewu w obecnej postaci.

Nadzieja to działa

+0

Nie chcę niczego jawnie określać, ponieważ powinien on zmieniać rozmiar w zależności od liczby pozycji na liście. W każdym razie odpowiedź umesh zrobiła dokładnie to, czego potrzebowałem. – j0ntech

+0

To działa dla mnie. Widok przewijania działa jako kontener i używam treści dynamicznej. więcej niż 20nos. W każdym razie, cieszę się, że to wymyślę. –

0

skorzystać z poniższego układu xml dla niestandardowego okna dialogowego, które chcesz wyświetlić,

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

i nazywają to tak ze swojego plik klasy,

>  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

Te rzeczy 'marginBottom' są całkiem sprytne, ale mam już odpowiedź. Mój oryginalny układ nie miał nawet "ListView". Czy nawet przeczytałeś pytanie? – j0ntech

+0

Witaj jOntech, już to przeczytałem i sugeruję ci alternatywne rozwiązanie. Ten przykład służy celowi i jest uruchomiony. Czy to sprawdziłeś? –