具有动态TextView大小的中心文本

时间:2015-05-19 20:29:17

标签: android

我有一个在列表项中右对齐的TextView。它的背景是一个可绘制的,只是一个椭圆形。此textview用作徽章,它必须是一个圆圈(宽度和高度相等)。

我通过运行以下代码实现此目的:

        textView.setText(badgeCount);
        textView.measure(0, 0);
        ViewGroup.LayoutParams params = textView.getLayoutParams();
        int size = Math.max(textView.getMeasuredWidth(), textView.getMeasuredHeight());
        params.width = size;
        params.height = size;
        badgesCountTextView.setLayoutParams(params);

除了文本左对齐外,这个工作正常。我的xml看起来像这样:

<RelativeLayout>
...
<TextView
        android:id="@+id/badge_count_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="8dp"
        android:paddingRight="8dp"
        android:paddingBottom="5dp"
        android:paddingTop="5dp"
        android:textSize="15sp"
        android:textColor="@color/white"
        android:layout_alignParentRight="true"
        android:background="@drawable/black_circle"
        tools:text="45"
        android:gravity="center"/>
</RelativeLayout>

我应该如何将文字置于徽章视图中心?我无法设置固定的宽度或高度,因为需要根据文本大小动态设置。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

将TextView的layout_widthlayout_height更改为fill_parent,并将TextView的重力设置为center,如下所示:

<RelativeLayout>
...
<TextView
    android:id="@+id/badge_count_text_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingLeft="8dp"
    android:paddingRight="8dp"
    android:paddingBottom="5dp"
    android:paddingTop="5dp"
    android:textSize="15sp"
    android:textColor="@color/white"
    android:layout_alignParentRight="true"
    android:background="@drawable/black_circle"
    tools:text="45"
    android:gravity="center"/>
</RelativeLayout>

otherwise, if your TextView is as small as your text, you could not center it easily

答案 1 :(得分:0)

您已设置textview大小以包含宽度和高度的内容。这意味着视图非常小 - 只是文本的大小。所以它是中心的。您可能想要的是将其宽度设置为fill_parent,或者将其layout_leftAlign和rightAlign或toLeftOf和toRightOf设置为使其最终具有更大的大小。但是,如果不了解您的其他布局以及您希望它看起来像什么我们无法帮助您。