在drawViewLeft居中的TextView中保留文本

Jac*_*cob 50 android textview

在我的应用程序中,我有一个标题栏,其中包含一个文本视图,其中fill_parent为width,具有特定的背景颜色和一些居中的文本.现在我想在标题栏的左侧添加一个drawable,所以我设置了drawableLeft,确定显示了文本和图像.然而,这里的问题是文本不再正确居中,例如,当添加drawable时,文本向右移动一点,如此处的屏幕截图所示:

没有可绘制的
与drawable

无论如何,我可以正确地将文本居中并且在不使用其他布局项目(例如LinearLayout)的情况下将drawable定位在上面吗?

bla*_*lah 26

虽然很脆弱,但您可以通过在drawable上设置填充来避免使用包装器布局:

<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" />
Run Code Online (Sandbox Code Playgroud)

你必须将padding调整到drawable的宽度,但是你只剩下一个TextView而不是额外的LinearLayout等.

  • 我不认为android:drawablePadding =" - 20sp"是正确的,你应该使用android:gravity ="center"代替! (10认同)
  • 你应该通过获得你设置的drawable的精确宽度来做java代码.重心不起作用 (3认同)
  • 像这样设置可绘制填充可能在不同的API上具有不同的行为.像这样使用它也是不安全的. (2认同)

bir*_*rdy 7

我遇到了类似的问题.通过使用单一的解决了它TextViewlayout_width="wrap_content"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"
    />
Run Code Online (Sandbox Code Playgroud)

  • 如果宽度是wrap_content,那么中心点是什么?棘手的部分是当宽度设置为 match_parent 或其他值时居中。最好指出这个案例。 (2认同)

小智 7

试试以下:

<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" />
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这应该是公认的答案。@雅各布 (2认同)

Que*_*lle 5

您可以使用android:gravity="center_vertical"将文本与图像垂直居中。或者可以使用 使其在 textView 内居中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" />
Run Code Online (Sandbox Code Playgroud)


Roh*_*eja 5

您可以将TextView的父级设置为RelativeLayout,其宽度为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>
Run Code Online (Sandbox Code Playgroud)

这就是结果的样子。