提问者:小点点

TextInputLayout材质组件问题:此组件上的样式要求应用程序主题为主题。材料成分(或后代)


我在使用TextInputLayout实现材质设计时遇到了问题,我知道解决方案是让您的活动主题继承材质组件主题之一,但这会给我的大多数应用程序主题带来这样的变化,并且需要更多时间来重构它。我想要的是仅针对应用程序上的特定TextInputLayout进行材质设计。

这就是我试过的

<com.google.android.material.textfield.TextInputLayout
                android:id="@+id/firstName"
                style="@style/CustomInputStyle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginEnd="5dp"
                android:layout_weight="1"
                app:errorEnabled="true">

                <com.google.android.material.textfield.TextInputEditText
                    android:id="@+id/fname"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/first_name"
                    android:inputType="text|textCapWords"
                    android:nextFocusDown="@id/lname"
                    android:textSize="12sp" />

</com.google.android.material.textfield.TextInputLayout>




<style name="CustomInputStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
            <item name="boxStrokeWidth">2dp</item>
            <item name="hintTextColor">@color/colorAccent</item>
            <item name="boxStrokeColor">@android:color/white</item>
            <item name="android:colorAccent">@color/colorAccent</item>
            <item name="android:textColorHint">@color/colorAccent</item>
        </style>

错误:由以下原因引起:java。lang.IllegalArgumentException:此组件上的样式要求应用程序主题为主题。物质成分(或后代)

我们不能这样做,而不是覆盖整个应用程序/活动主题吗?我只想在特定的片段中使用它。


共2个答案

匿名用户

我只是注意到,只需将Material Components主题放在XML布局的根视图中,现在就可以毫无错误地应用样式了。

在父/根视图中添加

android:theme="@style/Theme.MaterialComponents.Bridge"

然后将样式应用于子视图TextInputLayout

<com.google.android.material.textfield.TextInputLayout
            android:id="@+id/firstName"
            style="@style/CustomInputStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="5dp"
            android:layout_weight="1"
            app:errorEnabled="true">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/fname"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/first_name"
                android:inputType="text|textCapWords"
                android:nextFocusDown="@id/lname"
                style="@style/CustomEditText"
                android:textSize="12sp" />

        </com.google.android.material.textfield.TextInputLayout>

匿名用户

问题:如果您想将错误的样式应用到您的“TextInputLayout”,有时会发生这种情况。

例:在我的例子中,我尝试使用“TextInputLayout”作为下拉列表,所以在“TextInputLayout”中我放置了“AutoCompleteTextView”,在最后一个列表中,我确定了样式样式=“@style/Widget.Material3.TextInputLayout.OutlineBox.ExposedDropdownMenu”,所以它给出了上述错误。

解决方法:将样式更改为正确的样式。style=“@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu”,现在可以运行,应用程序运行正常。

之前:
style=“@style/Widget.Material3.TextInputLayout.OutlineBox.ExposedDropdownMenu”

之后:style=“@style/Widget.MaterialComponents.TextInputLayout.OutlineBox.Dense.ExposedDropdownMenu”