如何强制TextView将宽度更改为Android

时间:2016-09-26 12:22:54

标签: android android-layout

我的TextViews设置了android:layout_width="wrap_content"设置的提示,如果输入TextView的文字不如提示文字的宽度那么宽,那么TextView不会更改其宽度以包装文本。但是,如果输入的文本比提示文本的宽度宽,并且假设TextView有扩大的空间,那么它将增长以包装文本。

理想情况下,我想要的是TextView缩小到我的文本,无论提示文本的宽度是什么(TextView的原始宽度),但我也会除了提供获取文字宽度的方法的答案,因此我可以使用该宽度在setWidth上调用TextView

我已经尝试在初始化之后将TextView的最小宽度更改为0,但这并不能解决问题。有趣的是,如果我输入比提示文本更宽的文本(强制它增长),如果我从该文本中删除字符,直到它返回到提示文本强制它具有的宽度,它将缩小。我想要的是它始终缩小到文本的宽度,无论提示文本的宽度如何。

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center">
        <TextView
            android:id="@+id/month_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:hint="mm"
            android:textColorHint="@color/hint_color"
            android:singleLine="true"
            android:textSize="40sp"
            android:maxLength="2"/>
        <TextView
            android:id="@+id/first_hypen_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:hint="-"
            android:singleLine="true"
            android:textSize="40sp"/>
        <TextView
            android:id="@+id/day_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:hint="dd"
            android:textColorHint="@color/hint_color"
            android:singleLine="true"
            android:textSize="40sp"
            android:maxLength="2"/>
        <TextView
            android:id="@+id/second_hyphen_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:hint="-"
            android:singleLine="true"
            android:textSize="40sp"/>
        <TextView
            android:id="@+id/year_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:hint="yyyy"
            android:textColorHint="@color/hint_color"
            android:singleLine="true"
            android:textSize="40sp"
            android:maxLength="4"/>
    </LinearLayout>

2 个答案:

答案 0 :(得分:1)

使用&#34; ems&#34;提示长度

e.g。在XML设计中

android:ems="2"

这里为你day_textview提示&#34; dd&#34;,它的长度是2然后是android:ems =&#34; 2&#34;

OR,在自定义代码中

TextView tvDay = (TextView) findViewById(R.id.day_textview);
tvDay.setEms(tvDay.getHint().length());

所以&#34; ems&#34;结果是指最宽的角色的大小,通常是&#34; M&#34;得到它?因此,在EditText或TextView上将minEms设置为整数值(例如3)应确保其宽度至少为3个字符。您也可以设置maxEms。

我理解的是,你想要一个带提示字符长度宽度的文本。当您输入的文本多于提示长度时,您的文本应缩小,直到输入文本长度为止。一旦完成并删除了所有输入的文本,那么它应该采用相同提示的长度宽度。

为此提供了上述信息。

测试例如。

添加XML布局:

<EditText
        android:id="@+id/edtCheck"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:hint="abc"
        android:maxLines="1"
        android:text="I am an Android Developer" />

将此添加到您的活动中:

EditText edt = (EditText) findViewById(R.id.edtCheck);
        edt.setEms(3);//3 just for test
        edt.setMaxEms(1000);//1000 just for test

现在运行并检查它是否适用于你正在寻找的东西。

答案 1 :(得分:1)

我最终做的是在TextView""时将提示设置为文本,然后将提示重置为原始提示,如果所有文本都从它。这样,一旦输入文本,任何设置强制TextView具有最小宽度 - 由于初始提示文本宽度 - 将在设置新提示后重新配置,并且新的最小值{ {1}}宽度设置为0,因为新的提示文字宽度(TextView);如果所有文本都被删除,提示仍会按预期显示。