我有一个布局,每当我按下提交按钮并在文本输入布局上设置错误时,它会将editText变为红色,但我没有在设置错误的editText上设置任何颜色。 基本上我只是想在editText下面给出错误字符串,而不是在设置错误时将editText变成红色。 我的片段代码如下,
public class SignIn extends Fragment implements View.OnClickListener
{
TextInputLayout edEamil,edPassword;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
// LogUtil.e(TAG,"onCreateView");
return inflater.inflate(R.layout.fragment_signin,container,false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// LogUtil.e(TAG,"onViewCreated");
Button btSignin= GeneralFunction.findViewByIdAndCast(view, R.id.fs_bt_submit);
btSignin.setOnClickListener(this);
btSignin.setText(GeneralFunction.covertFistChat_everyWordUpper(getString(R.string.first_signin)));
TextView tvForgetPassword= GeneralFunction.findViewByIdAndCast(view, R.id.fs_tv_fPassword);
tvForgetPassword.setOnClickListener(this);
TextView tvSignUP= GeneralFunction.findViewByIdAndCast(view, R.id.fs_tv_fSignup);
tvSignUP.setOnClickListener(this);
tvSignUP.setText(GeneralFunction.covertFistChat_everyWordUpper(getString(R.string.first_signUP)));
edEamil=GeneralFunction.findViewByIdAndCast(view,R.id.fs_ti_email);
DrawableState.editextSelector(edEamil);
edPassword=GeneralFunction.findViewByIdAndCast(view,R.id.fs_ti_password);
DrawableState.editextSelector(edPassword);
}
@Override
public void onClick(View v) {
switch (v.getId())
{
case R.id.fs_bt_submit:
{
edEamil.setError("Not a valid email address!");
edPassword.setError("Not a valid password!");
}break;
}
}
}
我的片段xml代码如下,线性布局为父,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.TextInputLayout
android:id="@+id/fs_ti_email"
style="@style/textInputLayout">
<EditText
style="@style/edittext"
android:tag="@string/str_email"
android:hint="@string/str_email"/>
</android.support.design.widget.TextInputLayout>
<android.support.v4.widget.Space
android:layout_width="match_parent"
android:layout_height="@dimen/dim_edMarginTop"/>
<android.support.design.widget.TextInputLayout
android:id="@+id/fs_ti_password"
style="@style/textInputLayout">
<EditText
style="@style/edittext"
android:imeOptions="actionDone"
android:inputType="textPassword"
android:tag="@string/str_password"
android:hint="@string/str_password"/>
</android.support.design.widget.TextInputLayout>
<android.support.v4.widget.Space
android:layout_width="match_parent"
android:layout_height="@dimen/dim_edMarginButtonView"/>
<android.support.v7.widget.AppCompatButton style="@style/button"
android:id="@+id/fs_bt_submit"
android:text="@string/first_signin"/>
<android.support.v4.widget.Space
android:layout_width="match_parent"
android:layout_height="@dimen/dim_edPaddingLeftRigh"/>
<RelativeLayout android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView style="@style/textView"
android:id="@+id/fs_tv_fPassword"
android:text="@string/str_forgetPassword"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"/>
<TextView style="@style/textView"
android:id="@+id/fs_tv_fSignup"
android:text="@string/first_signUP"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
和editext和输入布局的样式如下,
<style name="textInputLayout">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:paddingBottom">@dimen/dim_textLaoutMargin</item>
<item name="android:layout_marginBottom">@dimen/dim_textLaoutMargin</item>
</style>
<style name="edittext" parent="android:Widget.EditText">
<item name="android:singleLine">true</item>
<item name="android:textSize">@dimen/dim_widgetMarginLeft</item>
<item name="android:textColor">@color/colorWhite</item>
<item name="android:paddingLeft">@dimen/dim_edPaddingLeftRigh</item>
<item name="android:paddingRight">@dimen/dim_edPaddingLeftRigh</item>
<item name="android:paddingTop">@dimen/dim_edPaddingTop</item>
<item name="android:paddingBottom">@dimen/dim_edPaddingBottom</item>
<item name="android:gravity">start</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:textColorHint">@color/colorWhite</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">@dimen/dim_buttonHeight</item>
<item name="android:inputType">text|textCapSentences|textNoSuggestions</item>
<item name="android:privateImeOptions">nm</item>
<item name="android:imeOptions">actionNext</item>
<item name="colorControlNormal">@color/colorWhite</item>
<item name="colorControlActivated">@color/colorPrimary</item>
<item name="android:textColorPrimary">@color/colorPrimary</item>
</style>
基本上我只想在editext下面给出错误字符串,而不是在设置错误时将editext变成红色。
答案 0 :(得分:-1)
你必须将setError()不是设置为TextInputLayout而是设置为TextInputLayout中的EditText。
XML:这里我在TextInputLayout中为EditText分配了id;
<android.support.design.widget.TextInputLayout
style="@style/textInputLayout"
android:id="@+id/fs_ti_email">
<EditText
android:id="@+id/edit_text_email" <!-- here your id-->
style="@style/edittext"
android:tag="@string/str_email"
android:hint="@string/str_email"/>
</android.support.design.widget.TextInputLayout>
Java:在这里我按ID找到EditText并为其分配setError()。
EditText email;
//your code here...
...
@Override
public void onClick(View v) {
switch (v.getId())
{
case R.id.fs_bt_submit:
{
email.setError("Not a valid email address!");
}break;
}
}