J'ai essayé d'utiliser layout_gravity
dans une horizontale linear layout
. Mais cela ne semble pas fonctionner. Je ne pas je veux utiliser un relative layout
ou toute autre disposition. Je veux savoir pourquoi cela ne fonctionne pas avec linear layout
. J'ai déjà utilisé layout_gravity
dans vertical
dispositions linéaires et cela a fonctionné comme je m'y attendais.
<LinearLayout
Android:id="@+id/shata"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
>
<TextView
Android:id="@+id/title_textview"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:textColor="@color/black"
Android:text="shata1"
Android:textAppearance="?android:attr/textAppearanceMedium"
/>
<TextView
Android:id="@+id/map_imageview"
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:layout_gravity="right"
Android:textAppearance="?android:attr/textAppearanceMedium"
Android:text="shata2"/>
</LinearLayout>
Comme vous pouvez le voir, la disposition linéaire a un orientation=horizontal
et width=match_parent
(il est juste à l'intérieur de la disposition racine). Mais les deux TextViews sont affichés collés à gauche du LinearLayout
même si j'ai donné leur layout_gravity=center
et layout_gravity=right
respectivement.
Réponse courte: si vous avez un LinearLayout horizontal, chaque enfant ne peut avoir que layout_gravity
valeurs de top
, bottom
et center
.
La raison en est que vous avez déjà dit au LinearLayout
d'aligner chaque enfant horizontalement, de gauche à droite dans l'ordre que vous spécifiez, ce qui signifie qu'il vous permet uniquement de spécifier l'alignement vertical de chaque enfant dans les layout_gravity
, et l'inverse s'applique lorsque votre LinearLayout
est vertical.
Il existe un bon lien expliquant le fonctionnement des différentes gravités ici .
En plus de réponse de Matt Taylor , vous pouvez spécifier le rapport de taille des éléments à l'intérieur de la mise en page en utilisant le layout_weight
propriété. Voir ceci thread pour plus de détails.
Le code ci-dessus divisera l'espace horizontal en trois zones égales.
<LinearLayout
Android:id="@+id/shata"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal">
<TextView
Android:layout_width="0"
Android:layout_height="match_parent"
Android:layout_weight="1"/>
<TextView
Android:layout_width="0"
Android:layout_height="match_parent"
Android:layout_weight="1"/>
<TextView
Android:layout_width="0"
Android:layout_height="match_parent"
Android:layout_weight="1"/>
</LinearLayout>
Donc, dans cet exemple
layout_gravity="left"
layout_gravity="center"
layout_gravity="right"
Si vous souhaitez que votre vue enfant soit centrée, il vous suffit de donner la gravité de votre disposition linéaire aux enfants. Sur votre disposition linéaire, définissez les éléments suivants:
Android:gravity="center"
J'espère avoir bien répondu à votre question.
vous pouvez diviser la disposition en 3 parties, puis dans la partie droite, mettre "shata2" dans la partie centrale, mettre "shata1" et la partie gauche, mettre une vue transparente.
<LinearLayout
Android:id="@+id/shata"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal">
<View
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
/>
<TextView
Android:id="@+id/title_textview"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_gravity="center|top"
Android:layout_weight="1"
Android:text="shata1"
Android:gravity="center"
Android:textAppearance="?android:attr/textAppearanceMedium"
Android:textColor="#111" />
<TextView
Android:id="@+id/map_imageview"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:layout_gravity="right"
Android:gravity="right"
Android:text="shata2"
Android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
mais dans votre code, lorsque vous utilisez une mise en page linéaire, il suffit de mettre les vues les unes après les autres et cela ne tient pas compte de la gravité de la mise en page. j'espère que ce sera utile.
Une façon de créer trois enfants en disposition linéaire horizontale serait (testée):
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="horizontal"
Android:weightSum="3"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<TextView
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1" />
<TextView
Android:layout_width="0dp"
Android:layout_weight="1"
Android:layout_gravity="center_horizontal"
Android:layout_height="wrap_content"/>
<TextView
Android:layout_weight="1"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:text="" />
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="horizontal">
<TextView
style="@style/Base.TextAppearance.AppCompat.Headline"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Blankets & Carpets" />
<ListView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:id="@+id/list_home_feature"
Android:layout_marginLeft="10dp"
Android:layout_marginTop="30dp"
Android:layout_marginRight="10dp">
</ListView>
</LinearLayout>