如何在新的 android 设计库中使用 TextInputLayout
Posted
技术标签:
【中文标题】如何在新的 android 设计库中使用 TextInputLayout【英文标题】:How to use TextInputLayout in new android design library 【发布时间】:2015-08-14 19:12:27 【问题描述】:最近google推出了新的android设计库,介绍了如何使用TextInputLayout
字段来启用EditText的Floating Hint功能。
here 提供的指导不多。
这个页面说
您现在可以将其包装在 TextInputLayout 中
但不知道,因为智能预测 (Ctrl+SPACE) 不会预测 TextInputLayout 的任何属性。所以我的问题是:
我们如何获取该组件底层的 EditText?
我们如何从 EditText 中获取数据?
【问题讨论】:
问题清晰有用... 这个问题很清楚也很有用,因为设计库的实现没有太多可用的指南! 检查this tutorial,很有帮助。 【参考方案1】:经验法则:TextInputLayout 应该包装 TextInputEditText 而不是普通的 EditText。
原因? TextInputEditText 是 EditText 的子类,旨在用作 TextInputLayout 的子类。
此外,使用 EditText 会向我们发出警告:添加的 EditText 不是 TextInputEditText。请改用该类。
【讨论】:
【参考方案2】:Material Components Library 有一个新的TextInputLayout
组件。
只需使用:
<com.google.android.material.textfield.TextInputLayout
android:layout_
android:layout_
android:hint="@string/hint_text">
<com.google.android.material.textfield.TextInputEditText
android:layout_
android:layout_/>
</com.google.android.material.textfield.TextInputLayout>
在official doc你可以找到所有的信息。
【讨论】:
【参考方案3】:正确的方法...
<android.support.design.widget.TextInputLayout
android:layout_
android:layout_
android:padding="10dp">
<android.support.design.widget.TextInputEditText
android:id="@+id/card_id_edit_text"
android:layout_
android:layout_
android:hint="@string/form_card_id_text"
android:inputType="number"
android:maxLength="10"/>
</android.support.design.widget.TextInputLayout>
如果您像 TextInputLayout 的子项一样使用 EditText,您将在 Android Monitor 中看到此消息:
I/TextInputLayout:添加的 EditText 不是 TextInputEditText。请改用该类。
【讨论】:
【参考方案4】:我们也可以使用 AppCompactEditText 来添加支持:appcompat in gradle
<android.support.design.widget.TextInputLayout
android:layout_
android:layout_
android:layout_margin="20dp">
<android.support.v7.widget.AppCompatEditText
android:id="@+id/et_name"
android:layout_
android:layout_
android:hint="@string/hint"
android:maxLength="100"
android:inputType="textNoSuggestions"
android:textColor="@color/colorPrimary"
android:textSize="@dimen/font_size_large" />
</android.support.design.widget.TextInputLayout>
【讨论】:
【参考方案5】:请将TextInputLayout
包裹在TextInputEditText
周围,而不是EditText
。
环绕EditText
在横向模式下确实存在问题。参考
this article 了解更多详情。
<android.support.design.widget.TextInputLayout
android:layout_
android:layout_>
<android.support.design.widget.TextInputEditText
android:layout_
android:layout_
android:hint="hint"
android:id="@+id/editText1" />
</android.support.design.widget.TextInputLayout>
【讨论】:
【参考方案6】:<android.support.design.widget.TextInputLayout
android:id="@+id/til_message"
android:layout_
android:layout_>
<EditText
android:id="@+id/et_message"
android:layout_
android:layout_
android:hint="@string/type_message"
android:maxLines="5"/>
</android.support.design.widget.TextInputLayout>
一旦您开始输入编辑文本,提示将自动向上移动,并且出现在文本输入布局上的编辑文本集错误下方出现的错误,例如不是在编辑文本上
tilMessage.setError("Message field is empty!");
禁用错误
tilMessage.setErrorEnabled(false);
【讨论】:
【参考方案7】:为了使其正常工作,您应该让您的应用主题从 Theme.AppCompat
(或其后代)主题扩展,就像从 Theme.AppCompat.Light.NoActionBar
扩展一样。
【讨论】:
【参考方案8】:这是在“用于编辑文本的浮动标签”下的design support library 中定义的。
<android.support.design.widget.TextInputLayout
android:id="@+id/name_et_textinputlayout"
android:layout_
android:layout_
android:layout_marginTop="@dimen/activity_vertical_margin">
<EditText
android:id="@+id/FeedBackerNameET"
android:layout_
android:layout_
android:hint="hinttext"
android:inputType="textPersonName|textCapWords" />
</android.support.design.widget.TextInputLayout>
【讨论】:
【参考方案9】:TextInputLayout
扩展 ViewGroup
类。
因此,这意味着您必须将您的 EditText
包装在 TextInputLayout
中。
<android.support.design.widget.TextInputLayout
android:layout_
android:layout_>
<EditText
android:layout_
android:layout_
android:hint="hint"
android:id="@+id/editText1" />
</android.support.design.widget.TextInputLayout>
【讨论】:
@moictab 它在设计支持库中,因此适用于 API 7+。 好吧,我已经在 API 19 中尝试过,但在膨胀视图时出现异常。也许我做错了什么。 我已经尝试过您的解决方案并在我的棒棒糖设备上运行它,但 TextInputLaayout 不起作用 @moictab 确保将compile 'com.android.support:design:22.2.0'
添加到您的 gradle 依赖项中。
TextInputLayout 真的很好。我只是在这里遵循本指南>>charmndroid.blogspot.in/2015/06/…。它说你必须初始化 TextInputLayout 而不是 EditText 然后控制!以上是关于如何在新的 android 设计库中使用 TextInputLayout的主要内容,如果未能解决你的问题,请参考以下文章
即使在新的克隆存储库中,Github 桌面也会在 >>> HEAD 中恢复提交结果
Android 如何在新的 sdk 3.0 中与 Facebook Open Graph 共享数据?
如何在新的 Google Play 控制台中停用所有旧版本的 APK?
在新的 Navigation Drawer Activity 模板中使用 onNavigationItemSelected 在 Fragments 之间切换(Android Studio 1.4 及更