web-dev-qa-db-ja.com

TextInputLayout:RuntimeException-インデックス24の属性を解決できませんでした

setErrorEnabledtextInputLayoutにしようとすると、このエラーが発生し続けます。

03-12 12:29:03.206 5706-5706/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                 Process: com.myapp, PID: 5706
                                                 Java.lang.RuntimeException: Failed to resolve attribute at index 24
                                                     at Android.content.res.TypedArray.getColor(TypedArray.Java:401)
                                                     at Android.widget.TextView.<init>(TextView.Java:696)
                                                     at Android.widget.TextView.<init>(TextView.Java:632)
                                                     at Android.widget.TextView.<init>(TextView.Java:628)
                                                     at Android.widget.TextView.<init>(TextView.Java:624)
                                                     at Android.support.design.widget.TextInputLayout.setErrorEnabled(TextInputLayout.Java:380)
                                                     at com.bekwaai.popupwindow.RGNamePopUp$1.onClick(RGNamePopUp.Java:48)
                                                     at Android.view.View.performClick(View.Java:4780)
                                                     at Android.view.View$PerformClick.run(View.Java:19866)
                                                     at Android.os.Handler.handleCallback(Handler.Java:739)
                                                     at Android.os.Handler.dispatchMessage(Handler.Java:95)
                                                     at Android.os.Looper.loop(Looper.Java:135)
                                                     at Android.app.ActivityThread.main(ActivityThread.Java:5254)
                                                     at Java.lang.reflect.Method.invoke(Native Method)
                                                     at Java.lang.reflect.Method.invoke(Method.Java:372)
                                                     at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:903)
                                                     at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:698)

これがシナリオです-textInputLayoutの中にpopupwindowがあります。これは、ポップアップウィンドウ内のコードです。

public class NamePopUp extends PopupWindow {

    Android.support.v7.widget.AppCompatEditText name;
    TextInputLayout nameInput;


    public NamePopUp(final Context context) {
        super(context);
        View popupView = LayoutInflater.from(context).inflate(R.layout.popup_rg_confirm, null);
        nameInput = (TextInputLayout) popupView.findViewById(R.id.name_input_layout);
    }
}

これはpopupwindowレイアウトの私のxmlです。

<Android.support.design.widget.TextInputLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_marginTop="12dp"
    Android:theme="@style/TextLabel"
    app:backgroundTint="@color/white"
    app:rippleColor="@color/white"
    Android:id="@+id/name_input_layout"
    Android:layout_marginBottom="8dp"
    Android:paddingRight="24dp"
    Android:paddingLeft="24dp">

<Android.support.v7.widget.AppCompatEditText
    Android:id="@+id/enter_name"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:textColor="@color/white"
    Android:textCursorDrawable="@drawable/color_cursor"
    Android:hint="@string/groupname"/>

</Android.support.design.widget.TextInputLayout>

これは私が使っているスタイルです:

<style name="TextLabel" parent="TextAppearance.AppCompat">
    <!-- Hint color and label color in FALSE state -->
    <item name="Android:textSize">20sp</item>
    <item name="Android:textColorHint">@color/white</item>
    <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
    <item name="colorAccent">@color/white</item>
    <item name="colorControlNormal">@color/white</item>
    <item name="colorControlActivated">@color/white</item>
</style>

ポップアップウィンドウはAndroid.support.v4.app.Fragment内で呼び出され、フラグメントはAppCompatActivity内で呼び出されます。

このエラーは、ユーザーが[OK]ボタンをクリックしたときに名前edittextが空白の場合に発生します。つまり、ユーザーはedittextに何も入力せず、[ok]をクリックしました。

    button_ok.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (StringUtils.isNotEmpty(name.getText().toString())) {
                nameInput.setErrorEnabled(false);
                groupNameEvent.doEvent(name.getText().toString());

            } else {
                nameInput.setErrorEnabled(true); //ERROR OCCURS HERE!
                nameInput.setError(context.getString(R.string.no_name));
            }
        }
    });

このエラーを解消するにはどうすればよいですか?

23
Simon

TextLabelの基本テーマをWidget.Design.TextInputLayoutに変更するだけです。

<style name="TextLabel" parent="Widget.Design.TextInputLayout">
61
Martin Y.

私にとっては次の作品( https://stackoverflow.com/a/42779409/291414 ):

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="textColorError">@color/design_textinput_error_color_light</item>
</style>
3
CoolMind