Android EditText,获取所有状态

Android EditText, getting ALL the states

我有一个普通的 XML 可绘制对象 happy_borders.xml,它将作为某些 EditText 的背景。

        <EditText
            android:background="@drawable/happy_borders

当然这行不通,因为在 many/most 设备上它会 focus 第一个,然后你什么也得不到,因为背景.

所以你做这样的事情...文件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_ ... 列表 - 那里有什么交易?在selector中有没有办法暗示"do this for every state"??

(2) 交替。在 EditText 中。你能告诉它是 "stateless" 并且从不,永远不关心状态吗?即,永远只使用一个背景?

请注意,在很多情况下,我认为在 EditText 后面放置一个单独的视图会更好;但无论如何我想知道如何实现上面的 (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) 如果您没有定义任何非默认状态,则默认状态为 "do this for every state".

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>

是所有需要的,有"no states";让每个州都一样。