2012-07-26 12 views
26

Mam element scrollview z relacją względną i kilka elementów formularza wewnątrz układu względnego.Android ScrollView odmawia przewinięcia do dołu

Z jakiegoś powodu, kiedy klawiatura jest podniesiona, nie można przewinąć do końca, co powoduje przycięcie jednego z przycisków na pół.

Oto zrzut ekranu przeglądarki hierarchii, aby pokazać, co mam na myśli.

enter image description here

Jak widać, system wie, że widok nadal obok klawiatury, jednak Scrollview (które poprawnie wypełnia widoczną część ekranu) nie będzie nadal przewijać, jak powinien.

Mam android:windowSoftInputMode="adjustResize" w manifeście dla działania i mogę/nie zmienię go na panoramowanie.

Każda pomoc jest doceniana.

edytuj: Widzę to w więcej niż jednym widoku. Oto xml z innego widoku z tym samym problemem:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/background" > 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="32dp" > 
     <EditText 
      android:id="@+id/reset_oldpass" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentRight="true" 
      android:ems="10" 
      android:singleLine="true" 
      android:hint="@string/current_password" 
      android:layout_marginTop="16dp" /> 
     <EditText 
      android:id="@+id/reset_pass1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentRight="true" 
      android:layout_below="@+id/reset_oldpass" 
      android:ems="10" 
      android:hint="@string/reset_new_pass" 
      android:inputType="textPassword" 
      android:layout_marginTop="16dp" /> 
     <EditText 
      android:id="@+id/reset_pass2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentRight="true" 
      android:layout_below="@+id/reset_pass1" 
      android:ems="10" 
      android:hint="@string/reset_confirm_pass" 
      android:inputType="textPassword" 
      android:layout_marginTop="16dp" /> 
     <TextView 
      android:id="@+id/reset_forgot_password" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentRight="true" 
      android:layout_below="@+id/reset_pass2" 
      android:layout_marginTop="16dp" 
      android:textColor="@color/Link" 
      android:textStyle="bold" 
      android:text="@string/Login_forgot_password" /> 
     <Button 
      android:id="@+id/reset_reset_password_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/reset_forgot_password" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="16dp" 
      android:layout_marginBottom="32dp" 
      android:text="@string/reset_change_pass" /> 
    </RelativeLayout> 
</ScrollView> 
+0

Tak samo dzieje się z 'LinearLayout'. Dziękujemy za przesłanie tego wątku! – avalancha

Odpowiedz

39

To jest naprawdę dziwne, ale wydaje się być spowodowane przez android:layout_margin="32dp" w RelativeLayout. Kiedy go wyjąłem, zwój działał prawidłowo.

Oczywiście z tego powodu musiałem dodać kilka marginesów do moich elementów formularza, ale przynajmniej to jest teraz naprawione.

+3

To prawda. Jeśli twój układ wewnątrz ScrollView ma marginesy, nie będziesz w stanie przewinąć całej ścieżki na dół. W moim przypadku mogłem po prostu umieścić margines w układzie głównym, ponieważ miałem LinearLayout zawierający przewijany widok i przycisk. – slott

+0

Dziękuję za automatyczną reakcję, to uratowało mnie od długiego czasu! – Apollo

+0

dopełnienie w przewijaniu uniemożliwiłoby marginesy każdego elementu? – Gulfaran

13

Miałem ten sam problem i naprawiłem go za pomocą dopełnienia w ScrollView, zamiast marginesu w RelativeLayout.

Usunąć android:layout_margin="32dp" z RelativeLayout (dziecko ScrollView) i dodać android:padding="32dp" do ScrollView.

+0

To było bardziej odpowiednie rozwiązanie niż przejść i podzielić margines w elementach potomnych. Margines należy po prostu umieścić w odpowiedniej lokalizacji; sam ScrollView zamiast otaczającego go elementu layoutu. –

+0

po prostu powiedziałem to, nie zauważając komentarza ani daty tego posta xD – Gulfaran

+0

Jeśli to pomogło komuś innemu, również napotkałem ten błąd, gdy wkładałem dopełnienie do 'ScrollView'. Jedyną rzeczą, która zadziałała, było umieszczenie wyściółki na dziecku ScrollView. –

0

Można również wstawić fałszywy pogląd naśladować dolny margines tak:

<View 
      android:layout_width="match_parent" 
      android:layout_height="20dp" 
      android:layout_below="@id/recompensaLabel" 
      android:layout_marginTop="0dp" 
      android:id="@+id/simulate_bottom_margin_view" 

      /> 

Efekt jest taki sam, trzeba tylko włożyć go poniżej ostatniego elementu w swojej względnej układu.

0

Po prostu miałem ten problem z aplikacją i okazało się, że było to spowodowane ustawieniem zawijania zawartości ScrollView layout_height. Problem polega na tym, że jeśli masz wystarczająco dużo treści, by potrzebować ScrollView, nie chcesz owijać zawartości, ponieważ dno ScrollView jest poza ekranem w dowolnej ilości. Nie miałem wystarczającej ilości danych, aby wpłynąć na to, ponieważ nie potrzebowałem ScrollView, dopóki klawiatura nie pojawi się. Wygląda na to, że PO był w tej samej sytuacji.

Teraz, po wyskoczeniu klawiatury, dolna część ScrollView jest podnoszona o tę samą wysokość, co wysokość klawiatury, i kończy się pod górną krawędzią klawiatury o tę samą liczbę, która znajdowała się poniżej dolnej krawędzi klawiatury. widoczny ekran.

Ostatecznie moją poprawką było związanie górnej części ScrollView z moim paskiem narzędzi, a następnie kliknięcie prawym przyciskiem myszy ScrollVIew w drzewie i wybranie "center vertically" (nie w opcji nadrzędnej). Teraz działa jak urok. Wysokość layout_height powinna automatycznie przejść do 0dp.

0

Utworzenie paska stanu w Lollipop i powyżej stworzyło dla mnie problem. Ustawienie

android:fitsSystemWindows="true"
do nadrzędnego widoku układu zawierającego scrollView rozwiązało problem.

Powiązane problemy