In meiner App habe ich eine Kopfzeile, die aus einer einzelnen Textansicht mit fill_parent als Breite besteht, die eine bestimmte Hintergrundfarbe und einen zentrierten Text hat. Jetzt möchte ich ein Zeichenelement auf der linken Seite der Kopfleiste hinzufügen, also lege ich das Zeichenelement links fest und der Text und das Bild werden sicher angezeigt. Das Problem hierbei ist jedoch, dass der Text nicht mehr richtig zentriert ist. Wenn beispielsweise das Zeichenelement hinzugefügt wird, wird der Text etwas nach rechts verschoben, wie in den Screenshots hier gezeigt:
Gibt es überhaupt einen Text, den ich richtig zentrieren und das Zeichenobjekt wie oben positionieren kann, ohne ein zusätzliches Layoutelement (z. B. ein LinearLayout) zu verwenden?
Obwohl fragil, können Sie die Verwendung eines Wrapper-Layouts vermeiden, indem Sie ein negatives -Padding für das drawable setzen:
<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" />
Sie müssen die Auffüllung an die Breite des Zeichenbereichs anpassen, aber es bleibt nur ein TextView statt eines zusätzlichen LinearLayout usw.
Ich hatte ein ähnliches Problem. Gelöst wurde es mit einzelnen Parametern der TextView
mit den Parametern layout_width="wrap_content"
und 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"
/>
Versuchen Sie folgendes:
<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" />
Ich hatte das gleiche Problem und löste es mit kleinen Änderungen in 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"
/>
Mit Android:gravity="center_vertical"
können Sie den Text vertikal zum Bild zentrieren. Oder es kann mit Android:gravity="center"
in der textView zentriert werden.
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:gravity="center"
Android:drawableLeft="@drawable/icon"
Android:text="Your text here" />
verwenden Sie diesen Weg
<?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>
es sieht ungefähr so aus wie dieses Foto meines Demo-Projekts
Diese Arbeit für mich.
<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>
Sie können das übergeordnete Element des TextView als RelativeLayout festlegen, dessen Breite match_parent ist.
<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>
Entfernen Sie das DrawableLeft und verwenden Sie ein Container-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>
Die akzeptierte Antwort funktioniert nicht für mich. Sie schlägt fehl, wenn die Breite von TextView mit dem übergeordneten Element übereinstimmt. Ich habe es mit FrameLayout gemacht.
<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>
sie können Ihre Kopfzeile so einstellen
<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>
Geben Sie einfach Texthöhe und Bildquelle entsprechend Ihren Anforderungen an
die Zeichenansicht ist Teil der Textansicht. Die Höhe der Textansicht ist also die Höhe der Zeichenfläche, wenn die Höhe des Texts geringer als die Zeichenhöhe ist.
Sie können das Schwerkraftattribut von TextView auf center_vertical setzen, damit sich der Text in der Mitte befindet.
> 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>
am besten verwenden Sie ConstraintLayout, um die Textansicht in der Mitte des Layouts und die Breite wrap_content (verwenden Sie nicht 0dp) zu verwenden
<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"
/>
Wenn keine der oben genannten Lösungen für Sie funktionierte? Dann versuch es unten zu beantworten
Beispiel-Screenshot des Designs .
Für das obige Bild finden Sie den Code unten.
<?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>
Eine einfache Lösung ist die Verwendung eines transparenten Bildes mit der gleichen Größe auf der gegenüberliegenden Seite der Textansicht .. In meinem Beispiel habe ich mein aktuelles vector_image kopiert und die Farben transparent gemacht.
<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" />