2011-03-17 70 views
3

我知道我可以通過調用performClick在代碼中手動觸發按鈕的OnClickListener.onClick,但似乎並沒有讓它看起來像點擊一樣。我正在尋找一種手動讓按鈕出現的方式,就好像它已被點擊一樣。我是否需要手動更改背景drawable並使其無效(然後在Handler.postDelayed調用中再次更改它),還是有更多的框架方法來執行此操作?Android:Button.performClick的可視版本

編輯

我知道如何使按鈕有不同的可繪製出現時,用戶啓動壓機壓制。問題是這樣的:

有沒有一種簡單的方法來使按鈕出現按下時沒有用戶身體按下編程?

SOLUTION

我只是子類按鈕並提出這是正常的背景爲StateListDrawable和繪製對象是被用作壓狀態下的按鈕知道的。我公開了一種方法,手動將背景設置爲「按下」可繪製的,並且我使用Handler.postAtTime使其返回到正常的背景,以便當完成後它可以再次用作常規按鈕。

回答

0

雅,你必須創建2個drawables。一個用於按下狀態,另一個用於正常狀態。

然後,你將不得不創建一個XML這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
    android:state_pressed="true" 
    android:drawable="@drawable/focused_drawable" /> 
    <item 
    android:state_pressed="false" 
    android:drawable="@drawable/unfocused_drawable" /> 
</selector> 

將您繪製的文件夾裏面這個XML。您還可以添加聚焦狀態

android:state_focused="true" 
佈局內

然後使用你的活動,讓你的按鈕標記內:

android:background="@drawable/your xml file name" 
+0

這不是問題。我知道如何爲按鈕狀態使用不同的drawable。問題是:如何讓代碼中的按鈕暫時處於按下狀態(就像它被點擊一樣)。我想讓按鈕看起來像被按下,並且我希望能夠在代碼中執行此操作(而不僅僅是當用戶按下按鈕時)。 – Rich

+0

我只是手動完成它,將背景設置爲模擬「按下」外觀,然後在計時器上(使用Handler)將按鈕設置回正常的StateListDrawable。如果您有興趣,該解決方案將在上面發佈。 – Rich

4

雖然這個問題很老了,我想我會仍然回答它。您不需要繼承該視圖。首先調用performClick(),視覺提示不會持續很長時間,但可以通過view.setPressed(true);設置按鈕的按下狀態,然後在幾秒後重置它。

handler.postDelayed(new Runnable() { 

    @Override 
    public void run() { 
     view.setPressed(false); 
    } 
}, 100);