2012-07-26 14 views
26

Ich habe ein root scrollview-Wurzelelement mit einem relativen Layout darin und eine Reihe von Formularelementen innerhalb des relativen Layouts.Android ScrollView weigert sich, nach unten zu scrollen

Aus irgendeinem Grund, wenn die Soft-Tastatur oben ist, scheint es nicht möglich, den ganzen Weg nach unten zu scrollen, die einen meiner Knöpfe in zwei Hälften schneidet.

Hier ist ein Screenshot des Hierarchie-Viewers, um zu zeigen, was ich meine.

enter image description here

Wie Sie das System weiß, sehen, dass der Blick über die Tastatur weiter, aber die Scroll nicht fortgesetzt wird (die den sichtbaren Teil des Bildschirms richtig füllt) nach unten zu rollen, wie es sollte.

Ich habe android:windowSoftInputMode="adjustResize" in das Manifest für die Aktivität, und ich kann/wird nicht auf Pan umschalten.

Jede Hilfe wird geschätzt.

edit: Ich sehe das in mehr als einer Ansicht. Hier ist die xml einer anderen Ansicht mit dem gleichen Problem:

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

Dies geschieht auch mit 'LinearLayout'. Danke für die Bereitstellung dieses Threads! – avalancha

Antwort

39

Das ist wirklich seltsam, aber es scheint von android:layout_margin="32dp" im RelativeLayout verursacht werden. Sobald ich es herausgenommen hatte, funktionierte die Schriftrolle richtig.

Aus diesem Grund musste ich natürlich ein paar Ränder zu meinen Formularelementen hinzufügen, aber das ist jetzt behoben.

+3

Das ist wahr. Wenn Ihr Layout in der ScrollView Ränder hat, können Sie nicht ganz nach unten scrollen. Für meinen Fall könnte ich einfach den Rand in das Wurzel-Layout einfügen, da ich ein LinearLayout mit einem Scrollview und einer Schaltfläche hatte. – slott

+0

Danke für Ihre automatische Antwort, es rettete mich von einer Menge Zeit! – Apollo

+0

Padding auf dem Scrollview würde die Notwendigkeit, jedes Element Rand setzen? – Gulfaran

13

Ich hatte das gleiche Problem, und ich habe es behoben, indem Padding in der ScrollView anstelle von Marge in RelativeLayout verwendet.

Entfernen Sie also von RelativeLayout (das untergeordnete Element von ScrollView), und fügen Sie der ScrollView android:padding="32dp" hinzu.

+0

Dies war die geeignetere Lösung, als den Rand in den untergeordneten Elementen zu teilen. Die Marge muss nur an der richtigen Stelle platziert werden. die ScrollView selbst statt des Layoutelements, das sie umgibt. –

+0

nur gesagt, ohne den Kommentar oder das Datum dieses Beitrags zu bemerken xD – Gulfaran

+0

Falls dies jemand anderem hilft, habe ich diesen Fehler auch gefunden, wenn ich das Padding auf das 'ScrollView' setze. Das Einzige, was für mich funktionierte, war, das Kind des 'ScrollView's aufzufüllen. –

0

Sie können auch eine falsche Ansicht legen Sie den unteren Rand so zu imitieren:

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

      /> 

Der Effekt ist das gleiche, Sie müssen es nur unter dem letzten Elemente in Ihrem Relative-Layout einzufügen.

0

Ich hatte gerade dieses Problem mit einer App und fand heraus, dass es aufgrund der ScrollView layout_height festgelegt wurde, um Inhalte zu umbrechen. Das Problem besteht darin, dass Sie den Inhalt nicht umbrechen möchten, wenn Sie genug Inhalt haben, um eine ScrollView zu benötigen, da der untere Teil der ScrollView um einen willkürlichen Betrag vom Bildschirm entfernt ist. Ich hatte nicht genug Daten, um davon betroffen zu sein, da ich kein ScrollView brauchte, bis die Tastatur auftauchte. Wie es aussieht, war das OP in der gleichen Situation.

Nun, sobald die Tastatur auftaucht, wird der untere Rand der ScrollView um den gleichen Betrag wie die Höhe der Tastatur angehoben und endet unter der Oberkante der Tastatur um den gleichen Betrag, unter dem sie sich befand sichtbarer Bildschirm.

Letztendlich war meine Lösung, den oberen Rand der ScrollView an meine Symbolleiste zu binden und dann mit der rechten Maustaste auf ScrollView in der Baumstruktur zu klicken und 'vertikal zentrieren' (nicht in übergeordneter Option) auszuwählen. Jetzt funktioniert wie ein Zauber. Die layout_height sollte automatisch auf 0dp gehen.

0

Statusleiste transparent machen in Lollipop und darüber war das Problem für mich. Die Einstellung

android:fitsSystemWindows="true"
auf die übergeordnete Ansicht des Layouts mit scrollView löste das Problem.