Dans mon application, j'ai une barre d'en-tête qui consiste en une seule vue de texte avec fill_parent comme largeur, qui a une couleur d'arrière-plan spécifique et du texte centré. Maintenant, je veux ajouter un dessin sur le côté gauche de la barre d’en-tête. Je règle donc drawableLeft et le texte et l’image sont affichés. Cependant, le problème réside dans le fait que le texte n'est plus correctement centré, par exemple, lorsque le dessin est ajouté, le texte est légèrement décalé vers la droite, comme indiqué dans les captures d'écran:
Y at-il de toute façon que je puisse centrer le texte correctement et faire en sorte que le dessin puisse être positionné comme ci-dessus sans utiliser d'élément de mise en page supplémentaire (tel qu'un LinearLayout)?
Bien que fragile, vous pouvez éviter l’utilisation d’une disposition wrapper en définissant unnégatifpadding sur le dessinable:
<TextView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_centerHorizontal="true"
Android:drawableLeft="@drawable/icon"
Android:drawablePadding="-20sp"
Android:text="blah blah blah" />
Vous devrez ajuster le rembourrage à la largeur du dessinable, mais il ne vous restera plus qu'un seul TextView au lieu d'un LinearLayout supplémentaire, etc.
J'ai rencontré un problème similaire. Résolu en utilisant une seule variable TextView
avec les paramètres layout_width="wrap_content"
et layout_gravity="center"
:
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:drawableLeft="@drawable/some_drawable"
Android:text="some text"
Android:layout_gravity="center"
Android:gravity="center"
/>
Essayez de suivre:
<TextView
Android:id="@+id/textView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:padding="10dp"
Android:textAlignment="center" />
J'ai eu le même problème et je l'ai résolu avec de petits changements dans Textview,
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:gravity="center"
Android:drawableLeft="@drawable/search_red"
Android:text="your text goes here"
/>
Vous pouvez utiliser Android:gravity="center_vertical"
pour centrer le texte verticalement avec l'image. Ou bien il peut être centré dans textView à l'aide de Android:gravity="center"
.
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:gravity="center"
Android:drawableLeft="@drawable/icon"
Android:text="Your text here" />
utiliser de cette façon
<?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="@color/White"
>
<RelativeLayout
Android:id="@+id/rlheader"
Android:layout_width="fill_parent"
Android:layout_height="50dp"
Android:layout_alignParentTop="true"
Android:background="@color/HeaderColor"
>
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:layout_centerVertical="true"
Android:text="Header_Title"
/>
<ImageView
Android:id="@+id/ivSetting"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_centerVertical="true"
Android:layout_marginLeft="10dp"
Android:src="@drawable/setting" />
</RelativeLayout>
</RelativeLayout>
il ressemble à quelque chose comme ce cliché de mon projet de démonstration
Cela fonctionne pour moi.
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:gravity="center"
Android:orientation="horizontal">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:drawableLeft="@drawable/trusted"
Android:gravity="center"
Android:text="@string/trusted"/>
</LinearLayout>
Vous pouvez définir le parent de TextView en tant que RelativeLayout dont la largeur est match_parent.
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<TextView
Android:id="@+id/edit_location_text_view"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_above="@id/add_location_text_view"
Android:gravity="start|center_vertical"
Android:layout_centerHorizontal="true"
Android:drawableStart="@Android:drawable/ic_menu_edit"
Android:text="Edit Location" />
</RelativeLayout>
Supprimez DrawableLeft et utilisez un conteneur FrameLayout.
<FrameLayout
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" >
<ImageView
Android:id="@+id/image"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="5dp"
Android:layout_gravity="center_vertical"
Android:src="@drawable/image" />
<TextView
Android:id="@+id/text"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Text"
Android:layout_gravity="center" />
</FrameLayout>
La réponse acceptée ne fonctionne pas pour moi. Elle échoue si la largeur de TextView est identique à celle du parent, je l'ai fait avec FrameLayout.
<FrameLayout
Android:layout_width="match_parent"
Android:layout_height="50dp"
Android:layout_marginTop="10dp"
Android:background="#000">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:drawableStart="@drawable/ic_circle_check_white"
Android:drawablePadding="10dp"
Android:text="Header"
Android:textColor="#fff"
Android:textSize="14sp"/>
</FrameLayout>
vous pouvez définir votre en-tête comme ça
<RelativeLayout
Android:id="@+id/linearLayout1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@drawable/head" >
<ImageView
Android:id="@+id/cat"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="5dp"
Android:onClick="onClick"
Android:layout_marginTop="10dp"
Android:src="@drawable/btn_back_" />
<RelativeLayout
Android:id="@+id/linearLayout1"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:gravity="center" >
<TextView
Android:id="@+id/TvTitle"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text=""
Android:layout_marginLeft="10dp"
Android:layout_marginRight="10dp"
Android:textColor="#000000"
Android:textSize="20sp"/>
</RelativeLayout>
</RelativeLayout>
Donnez juste la hauteur de Textview, la source de l'image selon vos besoins
drawable fait partie de TextView, donc la hauteur de la vue du texte sera la hauteur de la dessinable si la hauteur de votre texte est inférieure à la hauteur de la dessinable.
Vous pouvez définir l'attribut Gravity de TextView sur center_vertical afin que le texte soit au centre.
> This line is important ->> Android:gravity="start|center_vertical
<LinearLayout
Android:layout_width="match_parent"
Android:layout_margin="@dimen/marginplus2"
Android:layout_height="wrap_content">
<TextView
Android:layout_width="0dp"
Android:layout_weight="1"
Android:text="@string/like"
Android:gravity="start|center_vertical"
Android:drawablePadding="@dimen/marginplus1"
Android:drawableLeft="@drawable/ic_like"
Android:layout_height="wrap_content" />
<TextView
Android:layout_width="0dp"
Android:layout_weight="1.5"
Android:text="@string/comments"
Android:drawablePadding="@dimen/marginplus1"
Android:gravity="start|center_vertical"
Android:drawableLeft="@drawable/ic_comment"
Android:layout_height="wrap_content" />
<TextView
Android:layout_width="0dp"
Android:layout_weight="1"
Android:text="@string/share"
Android:drawablePadding="@dimen/marginplus1"
Android:gravity="start|center_vertical"
Android:drawableLeft="@drawable/ic_share"
Android:layout_height="wrap_content" />
</LinearLayout>
le meilleur moyen consiste à utiliser ConstraintLayout, pour rendre la vue texte au centre de la présentation et la largeur wrap_content (n'utilisez pas 0dp maintenant) afin que le dessin puisse suivre le texte.
<TextView
Android:id="@+id/tv_test"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="test"
Android:drawableLeft="@drawable/you_drawable"
Android:drawablePadding="5dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
/>
Si aucune des solutions ci-dessus ne vous convient?? Puis essayez ci-dessous la réponse
Exemple de capture d’écran du dessin .
Pour l'image ci-dessus, veuillez trouver le code ci-dessous.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Android.support.v7.widget.CardView
Android:id="@+id/my_card"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<LinearLayout
Android:id="@+id/bb"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:divider="@color/gray"
Android:orientation="horizontal"
Android:weightSum="2">
<TextView
Android:id="@+id/filter_tv"
style="?android:attr/buttonBarButtonStyle"
Android:layout_width="wrap_content"
Android:layout_height="?attr/actionBarSize"
Android:layout_gravity="center_horizontal"
Android:layout_weight="1"
Android:drawableLeft="@drawable/ic_baseline_filter_list"
Android:gravity="center|fill_horizontal"
Android:paddingLeft="60dp"
Android:text="Filter"
Android:textAllCaps="false"
Android:textStyle="normal" />
<View
Android:layout_width="1dp"
Android:layout_height="match_parent"
Android:layout_below="@+id/bb"
Android:background="@color/gray" />
<TextView
Android:id="@+id/sort_tv"
style="?android:attr/buttonBarButtonStyle"
Android:layout_width="wrap_content"
Android:layout_height="?attr/actionBarSize"
Android:layout_gravity="center|center_horizontal"
Android:layout_weight="1"
Android:drawableLeft="@drawable/ic_baseline_sort"
Android:drawablePadding="20dp"
Android:gravity="center|fill_horizontal"
Android:paddingLeft="40dp"
Android:text="Sort"
Android:textAllCaps="false" />
</LinearLayout>
</Android.support.v7.widget.CardView>
<View
Android:layout_width="match_parent"
Android:layout_height="0.9dp"
Android:layout_below="@+id/my_card"
Android:background="@color/gray" />
</RelativeLayout>
Une solution simple consiste à utiliser une image transparente de même taille du côté opposé à la vue texte . Dans mon exemple, j'ai copié mon vector_image et modifié les couleurs afin qu'elles soient transparentes.
<TextView
Android:id="@+id/name"
style="@style/TextStyle"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:drawableEnd="@drawable/ic_vector_caret_down_green"
Android:drawableStart="@drawable/ic_vector_space_18"
Android:gravity="center"
Android:padding="12dp"
Android:textColor="@color/green"/>
<TextView
Android:id="@+id/distance"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:drawableLeft="@drawable/distance"
Android:drawablePadding="10dp"
Android:padding="10dp"
Android:textAlignment="center"
Android:textColor="#ffffff"
Android:textSize="20sp" />