添加的 EditText 不是 TextInputEditText。请改为使用 class

EditText added is not a TextInputEditText. Please switch to using that class instead

我在 TextInputLayout 中使用 EditText,但是在将支持库升级到 23.2.0 后,我在 logcat 中收到此警告,两者之间有什么区别一个普通的 EditText 和一个 TextInputEditText?我似乎找不到它的任何文档。

它们本质上是一样的,但我认为 TextInputEditText 有更多的特性和可能的​​属性。我更改为 TextInputEditText,一切正常,看起来和以前使用标准 EditText 时一样。

没有它的文档,但是 class 是一个常规的 EditText,具有一个额外的功能:

Using this class allows us to display a hint in the IME when in 'extract' mode.

具体来说,它设置 EditorInfo.hintText. You'll notice in the TextInputLayout class 您可以指定提示及其外观,而不是作为子 EditText 小部件的一部分。

如果您需要这样做,您应该使用 TextInputEditText 以便它注意您在 TextInputLayout 中指定的提示信息。

我也想知道, gathered the documentation, but to the untrained eye it doesn't mean much. Here's what it's all about: "extract mode" 指的是 space 太小时显示的视图类型,例如 phone 上的风景。我正在使用带有 Google 键盘作为输入法编辑器 (IME) 的 Galaxy S4。

横向 UI 没有可见的 IME

基于焦点(在描述上),您可以看到 TextInputLayout 正在将提示推送到编辑器之外。这里没什么特别的,这就是 TextInputLayout 应该做的。

横向UI 正在编辑空名称字段

编辑名称您可以看到 IME 不会提示您正在编辑什么。

横向UI 正在编辑空描述字段

编辑说明您可以看到 IME 提示您正在编辑的内容。

布局 XML

两个字段的区别在于它们的类型 EditText VS TextInputEditText。这里重要的是 TextInputLayoutandroid: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>

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

android: fitsSystemWindows = "true"

然后错误消失了。

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