Android-Scrollview in RelativeLayout mit Knopfleiste
Ich versuche, die Implementierung eines login-Ansicht, wo mehrere EditTexts und ein logo auf dem Bildschirm angezeigt werden, mit einer Knopfleiste an der Unterseite, so etwas wie dieses:
alt-text http://russellhaering.com/media/addAccount.png
Das problem ist, dass auf sehr kleinen Bildschirmen, vor allem, wenn er seitlich gedreht, der gesamte main-Ansicht nicht auf den Bildschirm passen.
Momentan habe ich
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#234C59" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="5dip"
android:paddingLeft="15dip"
android:paddingRight="15dip"
android:orientation="vertical" >
<ImageView
android:id="@+id/logo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:layout_centerHorizontal="true"
android:src="@drawable/logo" />
<EditText
android:id="@+id/input_email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:inputType="textEmailAddress"
android:singleLine="true"
android:hint="Username or email" />
<EditText
android:id="@+id/input_password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop=""
android:inputType="textPassword"
android:singleLine="true"
android:hint="Password" />
</LinearLayout>
<LinearLayout
android:id="@+id/buttonbar_login"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal"
style="@android:style/ButtonBar" >
<Button
android:id="@+id/button_signup"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Sign Up" />
<Button
android:id="@+id/button_login"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Log In" />
</LinearLayout>
</RelativeLayout>
Habe ich versucht, die Kapselung der ersten LinnearLayout in eine ScrollView, die wie folgt aussieht:
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- Linear Layout Here -->
</ScrollView>
Aber das bringt zwei Probleme:
-
Den ScrollView nicht scrollen, auch auf Bildschirme, in denen die Daten nicht alle fit
-
Der ButtonBar schwimmt oben auf der onscreen-Tastatur verdeckt noch mehr von dem Bildschirm, wenn Sie die Tastatur hoch kommt.
Alles Super geklappt, wenn ich die Knöpfe innerhalb der ScrollView, aber jetzt, dass ich Sie in der Buttonleiste ich habe eine Menge von Schwierigkeiten herauszufinden dieses heraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es stellte sich heraus, dass die Lösung benötigt zwei Schritte:
Die Unfähigkeit zu Blättern, war ein Ergebnis der ScrollView die hinter der Button-Leiste. Um dies zu beheben, definierte ich die ScrollView unterhalb der Button-Leiste, dann verwendet
android:layout_above="@id/buttonbar_login"
zu zwingen, die ScrollView zu wohnen, ganz oben der Button-Leiste.Offenbar, wenn die Bildschirmtastatur geöffnet wird, wenn Sie einen ScrollView es wird in der Größe angepasst werden, so dass die Button-Leiste zu schweben mit der Tastatur. Um dies zu beheben habe ich das manifest geändert und Hinzugefügt android:windowSoftInputMode="adjustPan" um zu verhindern, dass der ScrollView von Größe.
Wenn Ihr Anwendungsfall unterstützt ausblenden der button-Leiste im Querformat können Sie überprüfen
Resources.getSystem().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE
und legen Sie die Taste bar, umView.GONE
.Du wahrscheinlich auch benötigen, um
android:windowSoftInputMode="adjustResize"
auf die<activity>
in Ihrer manifest-Datei. Android wird nur inadjustResize
automatisch, wenn die root-layout ist eineScrollView
(iirc).