添加的EditText不是TextInputEditText,请改用该类。

101
我在TextInputLayout中使用了一个EditText,但是在将支持库升级到23.2.0之后,在logcat中出现了这个警告。请问常规的EditTextTextInputEditText有什么区别?我找不到任何相关文档。

我已将支持库升级至23.2.1,但仍无法解决TextInputEditText在我的代码中找不到的问题。您是如何解决这个问题的? - Edijae Crusar
5个回答

113

我也有同样的疑问,Daniel Wilson收集了文档,但对于不熟悉的人来说,这些文档并没有多大意义。下面是它的含义:"提取模式"指的是当空间太小时显示的视图类型,例如在手机上的横屏模式。我正在使用装有Google键盘的Galaxy S4作为输入法编辑器(IME)。

没有可见IME的横向UI

根据焦点(在“说明”上),您可以看到TextInputLayout在推动提示信息离开编辑器方面的作用。这里没有什么特别之处,这就是TextInputLayout应该做的事情。

没有可见IME的横向UI

横向UI编辑空名称字段

编辑名称,您会发现IME没有给出您正在编辑什么的提示。

横向UI编辑空名称字段

横向UI编辑空描述字段

编辑说明,您会发现IME给出了您正在编辑什么的提示。

横向UI编辑空描述字段

布局XMLs

两个字段之间的区别在于它们的类型:EditTextTextInputEditText。这里重要的是TextInputLayout具有android:hint而不是包装的EditText,当TextInputEditText的几行Java代码时就会产生很大的差异。

名称字段

<android.support.design.widget.TextInputLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Item Name"
    >
    <EditText
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
</android.support.design.widget.TextInputLayout>

描述字段

<android.support.design.widget.TextInputLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Item Description"
    >
    <android.support.design.widget.TextInputEditText
        android:id="@+id/description"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:minLines="4"
        android:scrollbars="vertical"
        />
</android.support.design.widget.TextInputLayout>

3
我已将支持库升级至23.2.1,但仍然在我的代码中无法解析TextInputEditText。你是如何解决这个问题的? - Edijae Crusar
1
快速提示:根据文档,android:hint 属性应该放在 TextInputEditText 中而不是 TextInputLayout - DriesOeyen
与@gikarasojokinene相同的问题 - Damien Locque
1
@luxsypher 我最终放弃了它,使用另一种方法,即将EditText放入TextInputLayout中。 - Edijae Crusar
1
@jeet.chanchawat 这是一个向上转型,所以很安全。您应该始终使用提供所需功能(=API)的最通用类型。使用 TextInputEditText 是 UI 的实现细节。 - TWiStErRob
显示剩余7条评论

35
没有相关文档,但该类是常规的EditText类,具有一个额外的功能:
使用此类允许我们在“提取”模式下在IME中显示提示。
它特别设置了EditorInfo.hintText。您会注意到,在TextInputLayout类中,您可以指定提示及其外观,而不是作为子EditText小部件的一部分。
如果您需要这样做,应该使用TextInputEditText,以便它关注您在TextInputLayout中指定的提示信息。

2
有任何例子吗?我不知道你在暗示什么。 - behelit

4

它们本质上是相同的东西,但我认为TextInputEditText具有更多的功能和可能的属性。我改用TextInputEditText,一切都像标准的EditText一样工作和看起来。


我已经使用了TextInputLayout,我正在寻找一个名为TextInputEditText的EditText替代方案。 - Silvia H
抱歉,我说错了,我在谈论 TextInputEditText 而不是 layout。我已经编辑了答案。 - Nick Mowen

1
唯一的区别在于当您的设备处于横向模式时,TextInputEditText 会显示提示,而 EditText 不会。

-2

我遇到了这个问题,只需在我的xml文件中删除这一行:

android: fitsSystemWindows = "true"

错误消失了。


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