Je veux le contenu à l'intérieur du scrollView en tant que centre.
<ScrollView
Android:id="@+id/scroller"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:paddingTop="12dp"
Android:paddingBottom="20dp"
Android:scrollbarStyle="outsideOverlay"
Android:layout_gravity="center" >
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="check"
Android:gravity="center_vertical|center_horizontal"/>
</ScrollView>
Note: il n'y a pas de Android:gravity
attribut pour scrollvew.
n'importe quel sol: -
J'ai eu le même problème et finalement compris. Ceci est pour une verticale ScrollView
.
Placez votre ScrollView
dans un RelativeLayout
et centrez-le dans le RelativeLayout
. Pour que cela fonctionne, votre ScrollView
devrait avoir
Android:layout_height="wrap_content"
Voici à quoi devrait ressembler le code final:
<?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">
<ScrollView
Android:id="@+id/scrollView1"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_centerVertical="true" >
<LinearLayout
Android:id="@+id/linearLayout1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="b1"/>
<Button
Android:id="@+id/button2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="b2"/>
<Button
Android:id="@+id/button3"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="b3"/>
</LinearLayout>
</ScrollView>
</RelativeLayout>
Que dis-tu de ça?
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/scrollView1"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:paddingTop="12dp"
Android:paddingBottom="20dp"
Android:scrollbarStyle="outsideOverlay" >
<LinearLayout
Android:id="@+id/linearLayout1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:layout_gravity="center"
Android:gravity="center">
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="check"
Android:gravity="center_vertical|center_horizontal"/>
</LinearLayout>
</ScrollView>
Je pense qu’une solution plus élégante consisterait à utiliser le ScrollView
de Android:fillViewport
propriété. Un ScrollView
est un peu différent dans la façon dont il traite sa vue de contenu (ne peut en avoir qu'un), même si vous définissez match_parent
(fill_parent
) sur le ScrollView
il ne donnera pas autant d’espacement à sa vue de contenu, mais le comportement par défaut est que ScrollView
enveloppe le contenu indépendamment de ce que vous spécifiez pour cette vue. Quoi Android:fillViewport
_ dit au ScrollView
d’étirer son contenu pour remplir la fenêtre d’affichage ( http://developer.Android.com/reference/Android/widget/ScrollView.html#attr_Android:fillViewport ) Donc, dans ce cas, votre LinearLayout
sera étiré pour correspondre à la fenêtre d'affichage et si la hauteur passe derrière la fenêtre d'affichage, il sera alors possible de faire défiler ce qui est exactement ce que vous voulez!
La réponse acceptée ne fonctionnera pas correctement lorsque le contenu s'étend au-delà de ScrollView
, car il restera d'abord centré sur la vue du contenu, ce qui la coupera en partie, et le ScrollView
centré dans une autre disposition fonctionne mais ne se sent pas bien, à part cela, je pense que cela entraînera également une erreur de peluche (parent inutile ou quelque chose du genre).
Essayez quelque chose comme ça:
<ScrollView
Android:id="@+id/scroller"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:paddingTop="12dp"
Android:paddingBottom="20dp"
Android:scrollbarStyle="outsideOverlay"
Android:fillViewport="true">
<LinearLayout
Android:id="@+id/content"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:gravity="center">
<Button
Android:id="@+id/button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="check" />
</LinearLayout>
</ScrollView>
Rappelez-vous simplement que la raison pour laquelle il est centré ici à cause de la Android:gravity
sur le LinearLayout
puisque le ScrollView
étendra le LinearLayout
, gardez cela à l'esprit en fonction de ce que vous ajoutez à la mise en page.
Une autre bonne lecture sur ScrollView
bien que pas sur le centrage mais sur fillViewport
soit http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick /
Pour @Patrick_Boss - ce qui a empêché le contenu de couper dans mon application était de changer la gravité et layout_gravity en center_horizontal pour LinearLayout.
Cela a fonctionné pour moi ... mais je ne sais pas si cela fonctionnera pour vous.
Modification de la réponse de @ Ghost -
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/scrollView1"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:paddingTop="12dp"
Android:paddingBottom="20dp"
Android:scrollbarStyle="outsideOverlay" >
<LinearLayout
Android:id="@+id/linearLayout1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:layout_gravity="center_horizontal"
Android:gravity="center_horizontal">
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="check"
Android:gravity="center_vertical|center_horizontal"/>
</LinearLayout>
</ScrollView>
tilisez cet attribut dans ScrollView
Android:fillViewport="true"
Exemple
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scrollbarStyle="outsideOverlay"
Android:fillViewport="true"
>
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<!--Your Code goes here-->
</RelativeLayout>
</ScrollView>
Veillez à utiliser Single Child dans ScrollView, comme dans l'exemple ci-dessus, qui est Relativelayout.
Une chose à considérer est que ne pas définir. Assurez-vous que vos contrôles enfants, en particulier EditText
, ne pas ont la propriété RequestFocus
.
Ce peut être l’une des dernières propriétés interprétées de la mise en page et il sera remplacera les paramètres de gravité sur ses parents (layout
ou ScrollView
).