59

私のアプリでは、特定の背景色と中央揃えのテキストを持つ、幅としてfill_parentを持つ単一のテキストビューで構成されるヘッダーバーがあります。ここで、ヘッダー バーの左側にドローアブルを追加したいので、drawableLeft を設定し、テキストと画像が十分に表示されるようにします。ただし、ここでの問題は、テキストが適切に中央に配置されなくなったことです。たとえば、ドローアブルが追加されると、次のスクリーンショットに示すように、テキストが少し右にずれます。

ドローアブルなし
ドローアブル付き

テキストを適切に中央に配置し、追加のレイアウト項目 (LinearLayout など) を使用せずにドローアブルを上のように配置することはできますか?

4

22 に答える 22

33

脆弱ではありますが、ドローアブルに負のパディングを設定することで、ラッパー レイアウトの使用を避けることができます。

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

パディングをドローアブルの幅に合わせて調整する必要がありますが、追加の LinearLayout などではなく、TextView が 1 つだけ残っています。

于 2012-11-08T03:50:19.273 に答える
3

このように使う

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

私のデモプロジェクトのこのスナップのように見えます

ヘッダー画像

于 2012-06-29T12:51:35.550 に答える
2

私は同じ問題を抱えていましたが、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"
    />
于 2015-05-12T11:51:32.090 に答える
1

drawable は TextView の一部であるため、テキストの高さが drawable の高さよりも小さい場合、textview の高さは drawable の高さになります。

TextView の重力属性を center_vertical に設定すると、テキストが中央に配置されます。

于 2015-10-19T07:00:49.863 に答える
0

TextView を LinearLayout 内にラップします。次にandroid:gravity="center_horizontal"、LinearLayout に設定します。

<LinearLayout
        android:layout_width="0dp"
        android:gravity="center_horizontal"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:drawableStart="@drawable/your_drawable"
            android:drawablePadding="5dp"
            android:ellipsize="end"
            android:maxLines="1"
            android:textAlignment="center"
            android:textColor="@color/ic_text_color"
            android:textSize="15sp"
            tools:text="Your Text.." />

    </LinearLayout>
于 2021-06-04T14:49:15.003 に答える
0

このようにヘッダーを設定できます

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

必要に応じて、テキストビュー、画像ソースの高さを与えるだけです

于 2012-06-29T12:43:35.977 に答える
-1

このように簡単..試してみてください..

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center|left"
                android:drawableLeft="@drawable/icon"
                android:text="something something" />
于 2015-08-07T03:13:48.983 に答える
-18

それを取得する最も簡単な方法は次のとおりです。

<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:layout_alignParentLeft="true"
             android:src="@drawable/btn_back_d" />

       <TextView
            android:id="@+id/TvTitle"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text=""
            android:layout_centerHorizontal="true" 
            android:textColor="#000000" 
            android:textSize="20sp"/>

どこ

  • ImageView には alignParentLeft が true に設定されており、
  • TextView には centerHorizo​​ntal が true に設定されています
于 2012-06-29T12:55:42.297 に答える