'android:hint'会增加edittext的高度,而且不会根据输入的文本大小调整大小。

3

这是我的 EditText 布局:

                <EditText
                    android:id="@+id/edittext_information"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:textColorHint="@color/grey"
                    android:maxLength="4096"
                    android:hint="@string/default_information"
                    android:inputType="textMultiLine"
                    android:minLines="1"
                    android:lines="1"
                    android:maxLines="11"
                    android:scrollbars="vertical"
                    android:layout_marginTop="0dp"
                    android:background="@android:color/transparent"
                    android:padding="10dip"
                    android:gravity="top"/>

问题是我的default_information字符串很长,占据了四行。因此,最初的EditText为四行。但是当用户尝试输入一些文本时,EditText不会自动调整大小以适应已输入的文本(例如一行)。它仍然是四行。

如何指示EditText在提示文本很长时调整大小以适应已输入的文本?

更新:

请看这里的GIF演示我面临的问题:

Please see here is GIF demonstrating what problem I am facing


1
是的,对于我来说,EditText 的框在输入文本时会在一行内调整大小,但由于“lines”属性,在多行文本输入时会变成可滚动的单行。 - DaveNOTDavid
1
奇怪。您在设备/模拟器上使用的API版本是什么? - DaveNOTDavid
1
Dave,顺便说一下,非常感谢你的评论(Y)和验证。 - Atul
没问题!这是一个GIF,展示了我使用Android Marshmallow和你的EditText代码时的体验:http://giphy.com/go/NzllZTY5OGIt - DaveNOTDavid
嗨,戴夫,我已经更新了问题,并附上了GIF演示。也在这里上传了链接。请查看。谢谢! - Atul
显示剩余3条评论
2个回答

2
在我看来,按照惯例,EditText的提示行数应该保持最多一行,就像你通常在大多数应用程序中所经历的那样。例如,当您在布局中渲染EditText周围的其他视图时,如果您有一个大的EditText提示,它在初始文本输入时转换为单行,那么会感到有些尴尬,你知道吗?
虽然我相信这就是EditText被设计成这样的原因,但实际上有一种替代方法可以通过使用TextWatcher接口来编程方式地对EditText进行黑客和配置,如另一个SO帖子here所示。
附言:摆脱属性android:background="@android:color/transparent",这样测试起来会更容易 :-)

1
是的,我认为这种行为只是设计上的。我在想如果用户输入多行并删除它们,EditBox 会自动调整为单行。但是默认输入的提示文本却不是这样。无论如何,我最终将提示文本更改为单行默认文本。并将冗长的文本放在此 EditBox 上方的单独 TextView 中。感谢您所有的建议。 - Atul

0
对于仍在寻找解决方案的人,一个不错的解决方法是使用TextWatcher来动态设置/删除提示。将EditText的宽度和高度保持为wrap_content。代码应该像这样:
editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if (s.toString().isEmpty()) {
                editText.setHint("My hint...");
            } else {
                editText.setHint("");
            }
        }
    });

当没有文本时,提示将被设置,EditText 将调整为提示的尺寸。当有一些文本时,提示将为空,因此 EditText 必须调整为实际文本的尺寸。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接