2012-01-13 258 views
23

我希望按鈕背景在單擊按鈕後保持某種顏色,並在按下其他按鈕時再次更改顏色。我認爲這是「state_focused」狀態。什麼是按鈕的「state_focused」狀態?

但是,我似乎對我的Button只有兩個狀態是按下或未按下。

我是否正確理解state_focused狀態,或者是我的StateListDrawable(請參見下文)錯誤?

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_focused="true" android:state_pressed="false"><shape> 
      <solid android:color="#00ff00" /> 
     </shape></item> 
    <item android:state_pressed="true"><shape> 
      <solid android:color="#ff0000" /> 
     </shape></item> 
    <item><shape> 
      <solid android:color="#0000ff" /> 
     </shape></item> 

</selector> 

回答

37

state_focused是每當按鈕被集中在使用DPAD或軌跡球。使用觸摸時,視圖通常不會顯示重點狀態。

+0

謝謝dmon。你是否看到使用StateListDrawable來完成我想要的按鈕? – aez 2012-01-13 15:19:44

+3

我相信你可以使用「focusableInTouchMode」,但是開發者指南建議不要這樣做:「觸摸模式下的Fousable(參見View.setFocusableInTouchMode)是一個屬性,你可以使用代碼或者XML來設置自己的屬性,但是你應該使用它只適用於非常特殊的情況,因爲它違背了Android UI的正常行爲。「請參閱http://developer.android.com/resources/articles/touch-mode.html。 – dmon 2012-01-13 16:23:15

+1

我不禁感到這不能回答真正的問題。 – 2014-03-10 15:11:17

14

https://developer.android.com/guide/topics/resources/drawable-resource.html

android:state_pressed
布爾。如果在按下該對象時應該使用該項目(例如當按下某個按鈕時),則爲「true」;如果應在默認的非按壓狀態下使用此項目,則爲「false」。

android:state_focused
布爾。如果在對象具有輸入焦點時(例如,當用戶選擇文本輸入時)應該使用此項,則爲「true」。如果這個項目應該用於默認的非重點狀態,則爲「false」。

android:state_hovered
布爾。如果該對象被光標懸停時應該使用該項,則爲「true」;如果應在默認的非懸停狀態下使用此項目,則爲「false」。通常,這個drawable可能與用於「focused」狀態的drawable相同。
介紹了在API級14

android:state_selected
布爾。如果在使用方向控件進行導航時(如使用d-pad在列表中導航時),當對象是當前用戶選擇時應使用此項目時爲「true」;如果未選擇對象時應使用此項目,則爲「false」。
當焦點(android:state_focused)不夠時(例如當列表視圖具有焦點並且其中的某個項目用d-pad選中時)使用選定狀態。

android:state_checkable
布爾。如果在檢查對象時應該使用這個項目,則爲「true」;如果在對象不可檢查時應該使用這個項目,則爲「false」。 (只有當對象可以可檢查和非可檢查的插件之間轉換是有用的。)

android:state_checked
布爾。如果在檢查對象時應該使用該項目,則爲「true」;如果在取消對象時應該使用「false」。

android:state_enabled
布爾。如果在啓用對象時能夠使用該項目(能夠接收觸摸/點擊事件),則爲「true」;如果禁用對象時應該使用「false」。

android:state_activated
布爾。如果在激活對象作爲持久性選擇時(例如,在持久導航視圖中「突出顯示」之前選擇的列表項),則應該使用此項目。如果對象未被激活時應該使用「false」。
介紹了在API級11

android:state_window_focused
布爾。如果應用程序窗口具有焦點(應用程序位於前臺)時應使用此項目,則爲「true」,如果應用程序窗口沒有焦點時應使用此項目,則爲「false」(例如,如果通知窗口爲拉下來或出現對話框)。

+0

感謝波本威士忌,但是你有沒有關於如何讓按鈕在按下之後保持某種顏色並使用StateListDrawable按下某個其他按鈕的指導? – aez 2012-01-13 15:21:58

+0

您是否嘗試在onClick方法中執行setPressed(true)? – Bourbon 2012-01-13 15:29:49

+0

我還沒有嘗試過特定的方法,但是有很多方法可以在代碼中完成它(並且我確實在運行時有它的工作),我只是認爲如果我可以在XML StateListDrawable thingy。 – aez 2012-01-13 15:37:51