Android Scrollview dans RelativeLayout avec ButtonBar
Je suis en train de mettre en œuvre une vue login où plusieurs EditTexts et un logo sont affichées sur l'écran avec un ButtonBar au fond, quelque chose comme ceci:
le texte d'alt http://russellhaering.com/media/addAccount.png
Le problème est que sur de très petits écrans, surtout quand ils sont en rotation sur le côté, l'ensemble de la vue principale ne tient pas sur l'écran.
J'ai actuellement
<?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>
J'ai essayé de l'encapsulation de la première LinnearLayout dans un ScrollView qui ressemble à ceci:
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- Linear Layout Here -->
</ScrollView>
Mais qui présente deux problèmes:
- La ScrollView ne pas défiler, même sur des écrans où les données ne rentrent pas tous
- La ButtonBar flotte sur le clavier à l'écran, brouillant encore plus de l'écran lorsque le clavier apparaît.
Tout fonctionnait très bien quand j'ai eu des boutons à l'intérieur de la ScrollView, mais maintenant que je les ai dans la ButtonBar je vais avoir beaucoup de mal à comprendre cela.
OriginalL'auteur russell_h | 2010-08-03
Vous devez vous connecter pour publier un commentaire.
Il s'est avéré que la solution en deux étapes:
L'impossibilité de faire défiler grâce à la ScrollView être à l'origine de la Barre de boutons. Pour remédier à cela, j'ai défini le ScrollView en dessous de la Barre de Bouton, puis utilisé
android:layout_above="@id/buttonbar_login"
à la force de la ScrollView de résider entièrement au-dessus de la Barre de boutons.Apparemment lorsque le clavier à l'écran est ouvert, si vous avez un ScrollView il sera redimensionnée en permettant le Bouton de la Barre de flotter avec le clavier. Pour corriger cela j'ai modifié le manifeste et a ajouté android:windowSoftInputMode="adjustPan" pour prévenir la ScrollView de redimensionnement.
OriginalL'auteur russell_h
Si votre cas d'utilisation prend en charge le masquage de la barre de bouton en orientation paysage, vous pouvez vérifier
Resources.getSystem().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE
et réglez le bouton de la barre d'View.GONE
.Vous aussi probablement besoin de régler
android:windowSoftInputMode="adjustResize"
sur le<activity>
dans votre fichier manifeste. Android sera seulement mis enadjustResize
automatiquement lorsque la racine mise en page est unScrollView
(iirc).OriginalL'auteur Rich Schuler