Answers:
由于Google在TextInputLayout
中将引入,因此无需使用第三方库design-support-library
。
下面是一个基本示例:
<android.support.design.widget.TextInputLayout
android:id="@+id/text_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:errorEnabled="true">
<android.support.design.widget.TextInputEditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter your name" />
</android.support.design.widget.TextInputLayout>
注意:通过设置app:errorEnabled="true"
为的属性,TextInputLayout
一旦显示错误,它的大小就不会改变-因此它基本上会阻塞空间。
为了显示下面的错误EditText
,你只需要调用#setError
的TextInputLayout
(不上孩子EditText
):
TextInputLayout til = (TextInputLayout) findViewById(R.id.text_input_layout);
til.setError("You need to enter a name");
要隐藏错误并重置色彩,只需致电til.setError(null)
。
为了使用,TextInputLayout
您必须在build.gradle
依赖项中添加以下内容:
dependencies {
compile 'com.android.support:design:25.1.0'
}
默认情况下,的EditText
行将为红色。如果需要显示其他颜色,则可以在调用后立即使用以下代码setError
。
editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);
要清除它,只需调用clearColorFilter
函数,如下所示:
editText.getBackground().clearColorFilter();
textInputLayout.setError("Error messsage")
的颜色EditText
变为红色,就不再需要设置colorFilter了。要重置它,只需调用即可textInputLayout.setError(null)
。
editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);
最新的支持库不再需要
EditText
不是上调用setError遇到了这个问题TextInputLayout
。我看到了这个答案,但仍然想不出要更改的内容。很容易错过的事情。
您EditText
应该包裹在TextInputLayout
<android.support.design.widget.TextInputLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/tilEmail">
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:ems="10"
android:id="@+id/etEmail"
android:hint="Email"
android:layout_marginTop="10dp"
/>
</android.support.design.widget.TextInputLayout>
要获得所需的错误消息,请将error设置为 TextInputLayout
TextInputLayout tilEmail = (TextInputLayout) findViewById(R.id.tilEmail);
if (error){
tilEmail.setError("Invalid email id");
}
您应该添加设计支持库依赖性。在gradle依赖项中添加此行
compile 'com.android.support:design:22.2.0'
reVerse的回答很好,但是没有指出如何删除浮动错误工具提示之类的东西
您需要edittext.setError(null)
将其删除。
而且,正如有人指出的那样,您不需要TextInputLayout.setErrorEnabled(true)
布局
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter something" />
</android.support.design.widget.TextInputLayout>
码
TextInputLayout til = (TextInputLayout) editText.getParent();
til.setError("Your input is not valid...");
editText.setError(null);
TextInputLayout til = (TextInputLayout)editText.getParent();
til.setErrorEnabled(true);
til.setError("some error..");
private EditText edt_firstName;
private String firstName;
edt_firstName = findViewById(R.id.edt_firstName);
private void validateData() {
firstName = edt_firstName.getText().toString().trim();
if (!firstName.isEmpty(){
//here api call for ....
}else{
if (firstName.isEmpty()) {
edt_firstName.setError("Please Enter First Name");
edt_firstName.requestFocus();
}
}
}
EditText
。您更有可能需要包装EditText
或添加其他东西。见github.com/rengwuxian/MaterialEditText。