我有一个简单的 XML 可绘制 happy_borders.xml,它将作为某些 EditText 的背景。
<EditText
android:background="@drawable/happy_borders
当然这是行不通的,因为在许多/大多数设备上,它会聚焦第一个设备,然后你就得不到任何背景。
所以你做这样的事情...文件 happy_states.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- res/drawable/rounded_edittext_states.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@drawable/happy_borders" />
<item
android:state_focused="true"
android:drawable="@drawable/happy_borders" />
<item
android:state_enabled="true"
android:drawable="@drawable/happy_borders" />
</selector>
然后
<EditText
android:background="@drawable/happy_states
没问题,但是
(1) 实际上有一个巨大的 android:state_ ...
列表 - 这是怎么回事?在选择器
中,有没有一种方法可以暗示“对每个状态都执行此操作”??
(2) 交替。在 EditText 内。你能说它是“无状态的”并且永远不会关心状态吗?即,只使用一种背景?
请注意,在许多情况下,我认为,在 EditText 后面放置一个单独的 View 是更好的工程;但无论如何我想知道如何实现上面的(1)或(2)。
最佳答案
只需定义需要不同可绘制对象的状态,然后在末尾添加默认状态:
<?xml version="1.0" encoding="utf-8"?>
<!-- res/drawable/rounded_edittext_states.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@drawable/happy_borders" />
<item
android:drawable="@drawable/sad_borders" />
</selector>
编辑: 抱歉,没有完全回答您的问题:
1) 如果您没有定义任何非默认状态,则默认状态为“对每个状态执行此操作”。
2)我相信不会,解决方案可能是将背景设置为null
或特定的drawable
。
要明确这一点:
<?xml version="1.0" encoding="utf-8"?>
<!-- res/drawable/rounded_edittext_states.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/default_borders" />
</selector>
这就是“无状态”所需要的一切;让每个状态都相同。
关于Android EditText,获取所有状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41126772/