2010-06-27 18 views
29

Problem polega na tym, że jeśli mam widok (np. MyButton) wewnątrz zestawu RelativeLayout na alignParentBottom - (jak w poniższym kodzie) - a następnie zawiń RelativeLayout w widok przewijania (konieczne, aby zawartość była widoczne na mniejszych ekranach lub gdy orientacja zmienia się na krajobraz) - wtedy, gdy nadrzędne okno NIE jest widoczne (na przykład po zmianie na orientację poziomą) myButton jest wyświetlany na GÓRZE strony - NIE na dole.Android RelativeLayout: jak wyrównaćParentBottom po owinięciu w ScrollView?

W jaki sposób można wyrównać widok do dolnej części ekranu i pozostawić go na dole, nawet jeśli spód znajduje się poniżej zwoju?

<ScrollView 
android:id="@+id/mainScrollView" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:fillViewport="true"> 



<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/topLayout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 



... lots of views and stuff 


<Button android:layout_alignParentBottom="true" 
android:id="@+id/myButton" 
android:text="Click Me" /> 

</RelativeLayout> 
</ScrollView> 
+0

wiesz jak to zrobić dzisiaj? –

Odpowiedz

6

Użycie fill_parent jako wysokości dziecka ScrollView jest bez znaczenia. Mówisz RelativeLayout, aby zawsze był tak wysoki jak jego rodzic. W tym przypadku ScrollView staje się bezużyteczny! Wysokość RelativeLayout powinna być ustawiona na wrap_content, w takim przypadku, w zależności od tego, co zawiera RelativeLayout, alignParentBottom może nie działać zgodnie z oczekiwaniami. Powinieneś po prostu użyć LinearLayout, będzie to o wiele prostsze.

+0

Cóż, nie rozumiem, dlaczego mówisz, że przewijanie staje się bezużyteczne, jego funkcją jest zezwalanie na przewijanie i robi to ... więc muszę go użyć. Muszę użyć RelativeLayout, aby móc korzystać z android_alignParentBottom. Nie widzę sposobu, w jaki użycie LinearLayout rozwiązałoby ten problem, ponieważ wtedy nie mogę dopasować myButton do dolnej części ekranu. Czy nie jest możliwe wyrównanie widoku do dolnej części ekranu i jednoczesne przewijanie w tym samym czasie? – JohnRock

+0

Nie ma sensu, jeśli dziecko ma wysokość = fill_parent. fill_parent oznacza "Chcę być tak wysoki jak mój rodzic". Więc jeśli zawartość ScrollView jest tak duża, jak sam ScrollView, nie przewinie się. –

+0

Ok. Doceniam twoje wskazówki. Jednak układ rzeczywiście przewija się, to nie jest problem, który próbuję rozwiązać. – JohnRock

3

dobrze można to wypróbować

<LinearLayout android:id="@+id/parentLayout" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <ScrollView android:id="@+id/mainScrollView" 
     android:layout_width="fill_parent" android:layout_height="fill_parent" 
     android:layout_weight="1" xmlns:android="http://schemas.android.com/apk/res/android" 
     android:fillViewport="true"> 



     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/topLayout" android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 



      ... lots of views and stuff 


      <Button android:layout_alignParentBottom="true" android:id="@+id/myButton" 
       android:text="Click Me" /> 

     </RelativeLayout> 
    </ScrollView> 
</LinearLayout> 
+0

dzięki za pracę dla mnie –

+0

Dziękuję, stary! Zmierzyłem się z tym samym problemem i zacząłem myśleć, że to niemożliwe. Twoje rozwiązanie bardzo mi pomaga – Androider

24

Take przycisk z Scrollview, zawinąć zarówno Scrollview i przycisk w układzie liniowym ustawić wysokość na Scrollview do 0dip i ustaw jego waga do 1, nie ustawiaj żadnej właściwości masy dla przycisku, więc widok przewijania może zajmować całą pozostałą przestrzeń, zachowując tylko spację przycisku na dole.

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

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1"> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" > 

     ....lots of views... 


     </LinearLayout> 
    </ScrollView> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="match_parent" 
     android:layout_height="40dp" 
     android:text="Button" /> 

</LinearLayout> 
+7

Ale to sprawi, że 'Button' zawsze pozostanie na dole ekranu, nawet jeśli' ScrollView' jest przewijany, prawda? –

+0

Tak, to byłoby: D – kunmi

+0

To jest rozwiązanie, które lubię, ale po prostu uważaj na to, że "waga" jest zła dla wydajności – superuser

-1

To trochę późno, ale Najprostszym rozwiązaniem jest dodanie

android:below="@id/lots_of_stuffs" 

tak:

<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mainScrollView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true"> 

    <RelativeLayout 
    android:id="@+id/topLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 


    <LinearLayout 
     android:id="@+id/lots_of_stuffs" > 

     ... lots of views and stuff 

    </LinearLayout> 

    <Button android:layout_alignParentBottom="true" 
     android:id="@+id/myButton" 
     android:text="Click Me" 
     android:below="@id/lots_of_stuffs" /> <!-- Here is the "hack" --> 

    </RelativeLayout> 
</ScrollView> 
+0

Bit późno i nadal nie jest właściwym rozwiązaniem, spowoduje to rozciągnięcie przycisku do jego wysokości wypełnienia. – Shivansh

Powiązane problemy