【问题标题】:How to force a TextView to change width to the width of the text in Android如何强制TextView将宽度更改为Android中文本的宽度
【发布时间】:2017-02-03 18:57:09
【问题描述】:

我在我的TextViews 上设置了提示,其中设置了android:layout_width="wrap_content",如果输入到TextView 的文本没有提示文本的宽度那么宽,那么TextView 将不会t 更改其宽度以换行文本。但是,如果输入的文本比提示文本的宽度更宽,并且考虑到TextView 有变宽的空间,那么它会增长到环绕文本。

理想情况下,无论提示文本的宽度是多少(TextView 的原始宽度),我都希望 TextView 缩小到我的文本,但我也会将提供的答案除外一种获取我的 text 宽度的方法,因此我可以使用该宽度在 TextView 上调用 setWidth

我已经尝试在初始化后将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>

【问题讨论】:

  • 在你的 TextView 中添加这个android:singleLine="true" ,这有帮助吗?
  • @Vikrant 也已经设置好了。
  • 显示整个 xml 布局
  • @user1506104 完成

标签: android android-layout


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    使用带有提示长度的“ems”

    例如在 XML 设计中

    android:ems="2"
    

    这里给你 day_textview 有提示“dd”,它的长度是 2 然后 android:ems="2"

    或者,在自定义代码中

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

    所以“ems”原来是指最宽字符的大小,通常是“M”,明白吗?因此,在 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
    

    现在运行并检查它是否完全符合您的要求。

    【讨论】:

    • 问题不问如何设置最小或最大宽度
    • 提示并不是真正的内容,并且由于提示不应该改变,为什么不将最小宽度设置为等于提示呢?如果你的内容更大,TextView 将遵循文本大小,如果不是,它将遵循 Hint 的最小宽度
    • 检查更新的答案,如果它不起作用,请说明您的要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    相关资源
    最近更新 更多