如何在TextView中同时居中文本和图标?

时间:2016-09-05 06:31:51

标签: android xml

我有这样的要求: 我写下面的代码:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/shape_rect_green_half_circle"
    android:gravity="center"
    android:orientation="horizontal">

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="@string/health_consult_ordinary_doctor"
        android:textColor="@color/white"
        android:textSize="15.3dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="18dp"
        android:text="2次"
        android:textColor="@color/white"
        android:textSize="15.3dp" />
</LinearLayout>

它的运行方式如下:

一切似乎都运行良好,但是当我在TextView中添加一个drawable时,它变得很奇怪。就像这样:

后续代码:(请注意:android:drawablePadding无效)

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/shape_rect_green_half_circle"
    android:gravity="center"
    android:orientation="horizontal">

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:drawableLeft="@drawable/titlebar_consult_v6"
        android:drawablePadding="10.7dp"
        android:gravity="center"
        android:text="@string/health_consult_ordinary_doctor"
        android:textColor="@color/white"
        android:textSize="15.3dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="18dp"
        android:text="2次"
        android:textColor="@color/white"
        android:textSize="15.3dp" />
</LinearLayout>

所以问题是如何同时将TextView中的文字和图标居中。我知道可以通过在布局中编写ImageViewTextView来解决此问题,但是有任何解决方案吗? 我在网上搜索了很长时间,但一无所获。请帮助或尝试提供一些有关如何实现这一目标的想法。

已编辑:我发现:当我在android:layout_width="wrap_content"中设置TextView时,它可以正常运行。但是当我设置android:layout_width="wrap_content"android:layout_weight="1"时,它不起作用。谁能告诉我为什么?

4 个答案:

答案 0 :(得分:2)

试试这个,我又添加了一个LinearLayout并将TextView放入其中

<LinearLayout
    android:background="@drawable/shape_rect_green_half_circle"
    android:gravity="center"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:orientation="horizontal">

    <LinearLayout
        android:gravity="center"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_width="0dp">

        <TextView
            android:drawableLeft="@drawable/titlebar_consult_v6"
            android:gravity="center"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="@string/health_consult_ordinary_doctor"
            android:textColor="@color/white"
            android:textSize="15.3dp" />
    </LinearLayout>

    <TextView
        android:layout_height="wrap_content"
        android:layout_marginRight="18dp"
        android:layout_width="wrap_content"
        android:text="2次"
        android:textColor="@color/white"
        android:textSize="15.3dp" />
</LinearLayout>

答案 1 :(得分:0)

<LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal">

        <TextView
            android:id="@+id/txt_swift"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="2次"
            android:textColor="@android:color/white"
            android:textSize="@dimen/_18dp"
            android:drawableLeft="@drawable/titlebar_consult_v6"
            android:drawablePadding="@dimen/_15dp"
            android:gravity="center"/>

    </LinearLayout>
  

像这样添加

答案 2 :(得分:0)

也许使用SpannableString来获得类似的结果。像这样:

SpannableStringBuilder builder = new SpannableStringBuilder(text);
Bitmap image = BitmapFactory.decodeResource(context.getResources(), drawableId);
builder.setSpan(new ImageSpan(context, image, ImageSpan.ALIGN_BASELINE),
                index , index+1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);

答案 3 :(得分:0)

编辑答案:检查一下:它运行正常

=