Reputation: 5131
I have a text input layout and I want to use that to show an error message if the data entered in an edit text inside it is incorrect. The definitions are as follows:
<android.support.design.widget.TextInputLayout
android:id="@+id/number_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/TextLabelWhite" >
<EditText
android:id="@+id/number_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:digits="01234 56789"
android:hint="Number"
android:inputType="number"
android:textColor="@color/white" />
</android.support.design.widget.TextInputLayout>
The style is defined as follows:
<style name="TextLabelWhite" parent="TextAppearance.AppCompat">
<item name="android:textColorHint">@color/white</item>
<item name="colorAccent">@color/white</item>
<item name="colorControlNormal">@color/white</item>
<item name="colorControlActivated">@color/white</item>
</style>
Now if the data entered is not correct I do the following operations:
TextInputLayout numberInputLayout = (TextInputLayout) view.findViewById(R.id.number_input_layout);
EditText numberEditText = (EditText) getView().findViewById(R.id.number_edit_text);
numberEditText.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
numberInputLayout.setErrorEnabled(true);
numberEditText.setError("Tis an error dear");
Toast.makeText(getActivity(), error, Toast.LENGTH_SHORT).show();
When all of this is done I get the error:
Can't convert to color: type=0x2
on the line numberInputLayout.setErrorEnabled(true);
Where am I going wrong?
EDIT 1: As soon as I remove the TextLabelWhite
theme, it starts working. But the theme is necessary.
Upvotes: 7
Views: 8328
Reputation: 1687
Change
android:theme="@style/TextLabelWhite"
to
style="@style/TextLabelWhite"
in android.support.design.widget.TextInputLayout attributes in your xml, and you will not got an error.
UPDATE: To customize colors you can try this. Add
<item name="colorControlNormal">@android:color/white</item>
<item name="colorControlActivated">@android:color/white</item>
directly to your app theme style. It'll affect on all EditText, but if it's not a problem for your app it may helps.
UPDATE 2:
The best solution i've found. Use
android:theme="@style/TextLabelWhite"
just like in your xml. Change TextLabelWhite style parent to your AppTheme style, like:
<style name="TextLabelWhite" parent="AppTheme">
But android:textColorHint will not work on TextInputLayout (have no such attribute). You should use design:hintTextAppearance, but place it in different style and apply directly to TextInputLayout via
design:hintTextAppearance="@style/CustomTextAppearance"
Upvotes: 16
Reputation: 1684
Just Try This Once and do lemme know: without TextInputLayout
EditText numberEditText = (EditText) getView().findViewById(R.id.number_edit_text);
String strNumber = shipText.getText().toString();
if(TextUtils.isEmpty(strNumber )) {
numberEditText .setError("Please enter a value");
}
Or Do : with TextInputLayout
TextInputLayout numberInputLayout = (TextInputLayout) view.findViewById(R.id.number_input_layout);
EditText numberEditText = (EditText) getView().findViewById(R.id.number_edit_text);
**numberInputLayout.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);**
numberInputLayout.setErrorEnabled(true);
***numberInputLayout.setError("Tis an error dear");***
Toast.makeText(getActivity(), error, Toast.LENGTH_SHORT).show();
Upvotes: 0
Reputation: 75788
At first call view
instead of getView()
Don't
EditText numberEditText = (EditText) getView().findViewById(R.id.number_edit_text);
Do
EditText numberEditText = (EditText) view.findViewById(R.id.number_edit_text);
Upvotes: 2