webentwicklung-frage-antwort-db.com.de

Behalten Sie den Text in TextView mit zentriertem drawableLeft

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:

without drawable
with drawable

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?

38
Jacob

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.

18
blahdiblah

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"
    />
9
birdy

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" />
5
Programmer

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"
    />
5
Deepak

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" />

3
Quentin Colle

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 

Header Image

3
Khan

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>

 This is what the result looks like.

2
Rohan Taneja

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>
1
EpicPandaForce

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>
0
Ajay Chauhan

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

0
Aamirkhan

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.

0
abcfrom0
> 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>
0
vikas singh

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"
    />
0
sumang_87

Wenn keine der oben genannten Lösungen für Sie funktionierte? Dann versuch es unten zu beantworten

Beispiel-Screenshot des Designs .  enter image description here

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>
0

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"/>
0
Furedal
<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" />
0
Harshil