android - style - El diseño de TextInput convierte editext en rojo en el error de configuración
textinputedittext (1)
Tienes que setError () no para TextInputLayout sino para EditText dentro de TextInputLayout.
XML: aquí asigné el id para EditText dentro de TextInputLayout;
<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: aquí encuentro EditText por ID y le asigno 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;
}
}
Tengo un diseño, cada vez que presiono el botón enviar y establezco el error en el diseño de entrada de texto, convierte el texto de edición en rojo, pero no he puesto ningún color en editText en el error de configuración. Básicamente, solo quería dar la cadena de error debajo de editText y no convertir editText en rojo al configurar el error. Mi código Fragmento es el siguiente,
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;
}
}
}
Mi código xml para el fragmento es el siguiente con el diseño lineal como principal,
<?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>
y el estilo para editext y el diseño de entrada es el siguiente,
<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>
Básicamente, solo quería dar la cadena de error debajo del texto y no convertir el texto en rojo al configurar el error.