我在Android应用中对EditText进行了验证。错误消息按预期弹出,但不显示默认错误图标。
if(users.getText().toString().isEmpty()){
errorNum++;
users.setError("Field can not be empty");
} else {
users.setError(null);
}
我也尝试使用自定义图标,它也不起作用。
users.setError("Field can not be empty",getDrawable(R.drawable.ic_error_outline_black_24dp));
如何获取验证的默认错误图标
布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.dinesh.note.MainActivity">
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:labelFor="@+id/users"
android:text="@string/users"
android:textAppearance="@android:style/TextAppearance.Widget.TextView" />
<EditText
android:id="@+id/users"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number"
/>
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:labelFor="@+id/years"
android:text="@string/years"
android:textAppearance="@android:style/TextAppearance.Widget.TextView" />
<EditText
android:id="@+id/years"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:labelFor="@+id/percentage"
android:text="@string/percentage"
android:textAppearance="@android:style/TextAppearance.Widget.TextView" />
<EditText
android:id="@+id/percentage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="numberDecimal" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:labelFor="@+id/months"
android:text="@string/months"
android:textAppearance="@android:style/TextAppearance.Widget.TextView" />
<EditText
android:id="@+id/months"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number" />
</TableRow>
</TableLayout>
<TextView
android:id="@+id/tamount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_below="@+id/calculate"
android:layout_marginTop="24dp"
android:text="@string/tamount"
android:textAppearance="@style/TextAppearance.AppCompat.Title" />
<TextView
android:id="@+id/amount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_below="@+id/tamount"
android:layout_marginTop="24dp"
android:text="@string/amount"
android:textAlignment="center"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
android:textSize="36sp"
android:textColor="@color/colorAccent" />
<Button
android:id="@+id/calculate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:text="@string/calculate"
android:textColor="@android:color/background_light"
android:layout_marginTop="227dp"
android:onClick="calculateBtn"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
样式xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
答案 0 :(得分:1)
有两种方式 -
方法1
您可以通过覆盖setError()
方法创建自己的setCompoundDrawables()
类,并使用public class CustomErrorEditText extends EditText {
public CustomErrorEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void setError(CharSequence error, Drawable icon) {
setCompoundDrawables(null, null, icon, null);
}
}
方法显示错误图标。
setError
方法2
在Drawable drawable = getDrawable(R.drawable.ic_error_outline_black_24dp);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
users.setError("error", drawable);
中使用之前,您需要在drawable上设置边界。
.yourElement{
position: relative;
top: 50%;
transform: translateY(-50%);
}
答案 1 :(得分:1)
我认真建议您考虑采用这种方式的现代方法,原因之一是:随着更多用户升级其设备,Google提供的向后兼容库已经可以实现此目的。
例如,尝试:TextInputLayout
可以通过支持库获得。如果您尚未添加,请在app-level build.gradle
文件中执行此操作。
compile 'com.android.support:design:25.0.0'
然后在你的布局文件中:
<android.support.design.widget.TextInputLayout
android:id="@+id/quoteIdWrapper"
android:layout_gravity="start"
android:layout_width="match_parent"
android:gravity="start"
android:layout_height="wrap_content">
<EditText
android:id="@+id/quoteId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:lines="8"
android:layout_gravity="start"
android:gravity="top|start"
android:minLines="5"
android:maxLines="10"
android:scrollbars="vertical"
android:inputType="textCapSentences|textMultiLine"
android:hint="@string/quote_text"/>
</android.support.design.widget.TextInputLayout>
然后,您可以从代码中获取对这两个项目的引用(TextInputLayout & EditText
)。
接下来,验证Edittext字段,如果某些内容无效,请将以下属性设置为TextInputLayout
引用:
textInputLayout.setErrorEnabled(true);
textInputLayout.setError("Your error message");
这将自动用正确的颜色(经常是红色)发送给用户,以便更容易地知道某些东西是错过的。
我希望你明白我的想法。祝你好运!!