我想在 boxBackgroundColor
时动态更改TextInputLayout的editText.setEnables(false)
。
我试图通过res / color / selector_input_background_color做到这一点,但没有用。此外,TextInputLayout
(android.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不知道该参数-但是当布局是加载。
答案 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);