Donc, ma mise en page ressemble à ceci:
<ScrollView>
<RelativeLayout>
<BunchOfViews/>
<ImageView Android:layout_alignParentBottom="true"/>
</RelativeLayout>
</ScrollView>
J'ai la ScrollView
afin que toute la mise en page soit toujours visible quelle que soit la hauteur de l'écran. Le problème est que sur un écran très élevé, je veux toujours que ma ImageView
soit en bas. Cependant, un enfant de ScrollView
ne semble pas avoir un fond défini. La View
est placée en haut de la mise en page. Comment puis-je résoudre ce problème d'une manière ordonnée?
J'ai rencontré le même problème. Je n'ai jamais pu trouver une solution très agréable, mais voici comment je l'ai fait. Peut-être que quelqu'un d'autre a un meilleur moyen, je déteste ajouter des mises en page qui ne font rien.
Mon bidouillage consistait à ajouter une représentation linéaire factice au bas de la vue de défilement avec fill_parent pour occuper toute la pièce et forcer la vue de défilement à remplir l'écran. Ajoutez ensuite le composant de votre choix à cette application linéaire.
Voici une de mes mises en page qui fait ceci:
<ScrollView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_weight="1"
Android:fillViewport="true" >
<RelativeLayout
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_marginTop="15px" >
<!-- bunch of components here -->
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_below="@+id/spinner"
Android:layout_marginTop="5px"
Android:gravity="center_horizontal|bottom"
Android:paddingTop="2px" >
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:paddingLeft="20px"
Android:paddingRight="20px"
Android:text="Delete" />
</LinearLayout>
</RelativeLayout>
</ScrollView>
J'ai eu le même problème et j'ai trouvé cette page:
http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/
En gros, vous définissez le Android:fillViewport
du ScrollView sur true, ce qui permettra à la vue enfant de se développer à la même hauteur que le ScrollView lui-même, en remplissant l'espace. Il vous suffit ensuite de placer l'un des contrôles enfants layout_height
sur fill_parent
et layout_weight
sur 1
, ce qui provoque le "ressort" de ce contrôle pour remplir l'espace vide.
Notez que si le contenu de ScrollView est déjà suffisamment grand pour remplir ScrollView, le Android:fillViewport
n'a aucun effet, le paramètre ne prend effet que lorsque nécessaire.
Mon XML final ressemble à ceci:
<ScrollView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:fillViewport="true">
<LinearLayout
Android:orientation="vertical"
Android:layout_height="wrap_content">
<LinearLayout
Android:layout_height="fill_parent"
Android:layout_weight="1">
<!-- this expands to fill the empty space if needed -->
</LinearLayout>
<!-- this sits at the bottom of the ScrollView,
getting pushed out of view if the ScrollView's
content is tall enough -->
<ImageView
Android:layout_height="wrap_content"
Android:src="@drawable/footer_image">
</ImageView>
</LinearLayout>
</ScrollView>
il semble que la linéarité ne soit pas nécessaire, tout ce qui compte est le fillViewPort ..
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignBottomParent="true">
maintenant que vous avez spécifié que le délai relatif doit être au moins égal à la taille de l’écran.
son travail pour moi parfaitement Android: fillViewport = "true"
La réponse de Joel Malone L'ajout d'une vue au bas de la disposition dans une vue à défilement fait ce tour. Ma solution est presque la même, sauf que j'utilise le widget Space
pour effectuer le travail de remplissage de la hauteur restante à l'intérieur de la présentation parent. Comme ça:
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent
Android:fillViewport="true"
>
<LinearLayout
Android:orientation="vertical"
Android:layout_height="wrap_content"
>
<Android.support.v4.widget.Space
Android:layout_height="match_parent"
Android:layout_weight="1"
/>
<ImageView
Android:layout_height="wrap_content"
Android:src="@drawable/footer_image"
/>
</LinearLayout>
</ScrollView>
Attention:
fill_parent
dans les autres réponses est noté comme obsolète depuis longtemps;LinearLayout
vide pour remplir le reste de la mise en page parente, je pense que Space
est beaucoup plus approprié (il est conçu pour faire ce travail.)ScrollView
: Android:fillViewport="true"
. Ensemble, ils font ce tour.Sur votre vue que vous voulez être au bas utilisez Android: gravity = "bottom"
Cela devrait vous aider:
<RelativeLayout
Android:layout_marginTop="-45dip"
Android:padding="0dip"
Android:layout_alignParentBottom="true"
Android:gravity="bottom|right"
Android:background="@Android:drawable/bottom_bar"
Android:layout_height="fill_parent"
Android:layout_width="fill_parent">
<Button
Android:id="@+id/manual_setup"
Android:text="@string/account_setup_basics_manual_setup_action"
Android:minWidth="@dimen/button_minWidth"
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:layout_marginBottom="-4dip"
Android:layout_alignParentLeft="true"
Android:layout_centerVertical="false"
/>
<Button
Android:id="@+id/next"
Android:text="@string/next_action"
Android:minWidth="@dimen/button_minWidth"
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:drawableRight="@drawable/button_indicator_next"
Android:layout_marginBottom="-4dip"
Android:layout_alignParentRight="true"
Android:layout_centerVertical="false"
/>
</RelativeLayout>
ScrollView view = new ScrollView( this );
ScrollView.LayoutParams lps = new FrameLayout.LayoutParams( FILL_PARENT, FILL_PARENT, Gravity.CENTER );
LinearLayout layout = new LinearLayout( this );
// what ever you want in the Layout
view.addView( layout, lps );