如何同时应用 TextInputLayout 样式和 errorTextAppearance 样式
how to apply TextInputLayout style and errorTextAppearance style both
我正在尝试在文本输入中实现这两种样式,但它不起作用
在应用 errorTextAppearance
样式时出现错误。
08-20 09:55:27.959 5081-5081/com.rayvatapps.ctvforme E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.rayvatapps.ctvforme, PID: 5081
java.lang.UnsupportedOperationException: Failed to resolve attribute at index 4: TypedValue{t=0x2/d=0x1010099 a=1}
at android.content.res.TypedArray.getColor(TypedArray.java:469)
at android.widget.TextView.<init>(TextView.java:892)
at android.widget.TextView.<init>(TextView.java:818)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:87)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:83)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:79)
at android.support.design.widget.IndicatorViewController.setErrorEnabled(IndicatorViewController.java:422)
at android.support.design.widget.TextInputLayout.setErrorEnabled(TextInputLayout.java:938)
at android.support.design.widget.TextInputLayout.setError(TextInputLayout.java:1055)
at com.rayvatapps.ctvforme.FormActivity.validateEmail(FormActivity.java:237)
at com.rayvatapps.ctvforme.FormActivity.access0(FormActivity.java:53)
at com.rayvatapps.ctvforme.FormActivity$MyTextWatcher.afterTextChanged(FormActivity.java:326)
at android.widget.TextView.sendAfterTextChanged(TextView.java:9375)
at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:11917)
at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1262)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:574)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:504)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:502)
at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:843)
at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:616)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:396)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:85)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
XML
<android.support.design.widget.TextInputLayout
android:id="@+id/tilname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/TextLabel"
app:errorTextAppearance="@style/error_appearance">
<EditText
android:id="@+id/edname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:hint="@string/full_name"
android:textColorHint="@color/gray"
android:textColor="@color/white"
android:textSize="@dimen/_15sdp"
android:inputType="" />
</android.support.design.widget.TextInputLayout>
JAVA
if (edName.getText().toString().trim().isEmpty()) {
tilName.setError(getResources().getString(R.string.err_msg_name));
requestFocus(edName);
return false;
} else
{
tilName.setErrorEnabled(false);
}
风格
<style name="error_appearance" parent="@android:style/TextAppearance">
<item name="android:textColor">@color/red</item>
<item name="android:textSize">12sp</item>
</style>
<style name="TextLabel" parent="TextAppearance.AppCompat">
<!-- Hint color and label color in FALSE state -->
<item name="android:textColorHint">#4DFFFFFF</item>
<item name="android:textSize">@dimen/_20sdp</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="colorControlNormal">#4DFFFFFF</item>
<item name="colorControlActivated">@color/colorPrimary</item>
<item name="errorTextAppearance">@style/error_appearance</item>
</style>
将 TextLabel theme
父级更改为 Widget.Design.TextInputLayout 后,它现在可以工作了
<style name="TextLabel" parent="Widget.Design.TextInputLayout">
<item name="android:textColorHint">#4DFFFFFF</item>
<item name="android:textSize">@dimen/_20sdp</item>
<!-- Label color in TRUE state and bar color FALSE and TRUE State -->
<item name="colorAccent">@color/colorAccent</item>
<item name="colorControlNormal">#4DFFFFFF</item>
<item name="colorControlActivated">@color/colorPrimary</item>
</style>
我正在尝试在文本输入中实现这两种样式,但它不起作用
在应用 errorTextAppearance
样式时出现错误。
08-20 09:55:27.959 5081-5081/com.rayvatapps.ctvforme E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.rayvatapps.ctvforme, PID: 5081
java.lang.UnsupportedOperationException: Failed to resolve attribute at index 4: TypedValue{t=0x2/d=0x1010099 a=1}
at android.content.res.TypedArray.getColor(TypedArray.java:469)
at android.widget.TextView.<init>(TextView.java:892)
at android.widget.TextView.<init>(TextView.java:818)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:87)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:83)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:79)
at android.support.design.widget.IndicatorViewController.setErrorEnabled(IndicatorViewController.java:422)
at android.support.design.widget.TextInputLayout.setErrorEnabled(TextInputLayout.java:938)
at android.support.design.widget.TextInputLayout.setError(TextInputLayout.java:1055)
at com.rayvatapps.ctvforme.FormActivity.validateEmail(FormActivity.java:237)
at com.rayvatapps.ctvforme.FormActivity.access0(FormActivity.java:53)
at com.rayvatapps.ctvforme.FormActivity$MyTextWatcher.afterTextChanged(FormActivity.java:326)
at android.widget.TextView.sendAfterTextChanged(TextView.java:9375)
at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:11917)
at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1262)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:574)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:504)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:502)
at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:843)
at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:616)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:396)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:85)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
XML
<android.support.design.widget.TextInputLayout
android:id="@+id/tilname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/TextLabel"
app:errorTextAppearance="@style/error_appearance">
<EditText
android:id="@+id/edname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:hint="@string/full_name"
android:textColorHint="@color/gray"
android:textColor="@color/white"
android:textSize="@dimen/_15sdp"
android:inputType="" />
</android.support.design.widget.TextInputLayout>
JAVA
if (edName.getText().toString().trim().isEmpty()) {
tilName.setError(getResources().getString(R.string.err_msg_name));
requestFocus(edName);
return false;
} else
{
tilName.setErrorEnabled(false);
}
风格
<style name="error_appearance" parent="@android:style/TextAppearance">
<item name="android:textColor">@color/red</item>
<item name="android:textSize">12sp</item>
</style>
<style name="TextLabel" parent="TextAppearance.AppCompat">
<!-- Hint color and label color in FALSE state -->
<item name="android:textColorHint">#4DFFFFFF</item>
<item name="android:textSize">@dimen/_20sdp</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="colorControlNormal">#4DFFFFFF</item>
<item name="colorControlActivated">@color/colorPrimary</item>
<item name="errorTextAppearance">@style/error_appearance</item>
</style>
将 TextLabel theme
父级更改为 Widget.Design.TextInputLayout 后,它现在可以工作了
<style name="TextLabel" parent="Widget.Design.TextInputLayout">
<item name="android:textColorHint">#4DFFFFFF</item>
<item name="android:textSize">@dimen/_20sdp</item>
<!-- Label color in TRUE state and bar color FALSE and TRUE State -->
<item name="colorAccent">@color/colorAccent</item>
<item name="colorControlNormal">#4DFFFFFF</item>
<item name="colorControlActivated">@color/colorPrimary</item>
</style>