1

我有一個微不足道的xml drawable happy_borders.xml,它將成爲某些EditText的背景。Android 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_ ... - 那裏有什麼交易?在selector有沒有一種方法可以暗示「爲每個狀態做這個」?

(2)交替。在EditText中。你能否說它是「無國籍」的,永遠都不會關心國家?即只使用一個背景?

請注意,在許多情況下,我認爲只需在EditText後放置一個單獨的視圖就可以實現更好的工程設計;但無論如何,我想知道如何實現(1)或(2)以上 - 感謝機器人專家!

+0

「只使用一個背景?」 - 區分聚焦狀態和未聚焦狀態對於觸摸屏不存在(例如TV)的UX或者未用於當前交互(例如鍵盤)的UX是重要的。 – CommonsWare

回答

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> 

是所有需要,有 「無狀態」;讓每個國家都一樣。

+0

發送獎勵給我們很棒的答案,謝謝@RomanKolomenskii! – Fattie

+0

哇,謝謝! @JoeBlow –

+0

沒什麼。我的榮幸。再次感謝 – Fattie