更改android.support.design.widget的TextInputLayout的boxBackgroundColor

时间:2018-09-25 09:51:25

标签: android android-support-library androidx

我想在 boxBackgroundColor 时动态更改TextInputLayout的editText.setEnables(false)。 我试图通过res / color / selector_input_background_color做到这一点,但没有用。此外,TextInputLayoutandroid.support.design.widget.TextInputLayout)不具有boxBackgroundColor这样的参数! ;(-它仅在AndroidX库(com.google.android.material.textfield.TextInputLayout中预置,我担心现在无法迁移到。(旧项目)

这是我的布局外观

<android.support.design.widget.TextInputLayout
        [...]
        android:theme="@style/TextInputLayoutTheme"
        style="@style/TextInputLayoutStyle">

        <android.support.design.widget.TextInputEditText
             [...]
             />

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

TIL从新的MaterialDesign继承样式

<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.FilledBox.Dense">
    <item name="boxBackgroundColor">@color/selector_input_background_color</item>
</style>

根据状态,我在res / color中提供了选择器

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="#00FF00"/>
    <item android:color="@color/editTextBackground"/>
</selector>

恐怕这是一个错误,因为Google承诺与28.0.0支持库版本和AndroidX保持兼容性。即使TextInputLayout没有.setBoxBackgroundColor之类的方法也可以在样式内工作,但是选择器却没有样式。

我怀疑由于这个间隙,即使我有选择器boxBackgroundColor,当EditText更改state:enabled时也不会调用它,因为TextInputLayout不知道该参数-但是当布局是加载。

1 个答案:

答案 0 :(得分:0)

当前只有解决方法。

只要您想一直保持相同的框色,就可以使用 support 库。

<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.FilledBox.Dense">
    <item name="boxBackgroundColor">@color/selector_input_background_color</item>
</style>

但是,如果要更改其颜色(例如,表示该字段已禁用),则必须以编程方式进行更改。但是有一个障碍。您必须切换到 androidX ,因为在android.support中缺少此方法。

所以你必须做

textInputLayoutPhone.setBoxBackgroundColorResource(R.color.editTextDisableBackground);