2011-12-15 82 views
1

按鈕(如背景,文字顏色等)的某些XML屬性可以與顏色或可拉伸狀態列表中定義這樣的:的Android:按鈕狀態改變事件

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
      android:color="#ffff0000"/> 
    <item android:state_focused="true" 
      android:color="#ff0000ff"/> 
    <item android:state_enabled="true" 
      android:color="#ff00ffff"/> 
    <item android:color="#ff000000"/> 
</selector> 

當視圖狀態更改(按壓/未按下,例如),相應的顏色會自動改變。

如何可編程地處理某種stateChangedEvent來執行更復雜的佈局更改,而不僅僅是更改顏色(例如,更改字體大小或設置其他文本)?

+1

基要üWANNA表明,當按鈕被點擊的時候,已經被按下? – 2011-12-15 10:11:49

+0

那麼有沒有聽衆聽onSelected?由於程序callin setSelected(bool)的某些其他部分,它可能不發生點擊。就像沒有做自定義按鈕類一樣。 – 2014-06-04 07:12:11

回答

4

對於焦點更改和觸摸事件,您可以通過setOnFocusChangeListener和setOnTouchListener註冊偵聽器。更改關於您可以在更改按鈕狀態後直接執行的禁用/啓用狀態。

+0

看起來就像沒有任何常見的方式一次處理所有的變化? – PVoLan 2011-12-15 11:18:18

0

針對特定視圖的Handler onTouch(視圖v,MotionEvent事件),並根據您的要求在MotionEvent.DOWN/Up中執行操作。

0

您必須通過findViewById(<object_id>)參照查看對象(按鈕),並使用API中的適當方法。

例如:

private Button aButton;

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_layout); 

    aButton = (Button) findViewById(R.id.your_button_id); 

    //example 1 
    aButton.setVisibility(SomeExpressionEvaluation ? View.GONE : View.VISIBLE); 

    //example 2 
    if (SomeExpressionEvaluation) { 
     aButton.setText("Some Text"); 
    } 

等等,只是看看API,尤其是從View類繼承的方法。

4

//使用選擇方法來傳遞您的按鈕和圖像 //你可以用顏色也

b1=(Button)findViewById(R.id.button1); 

//  b2=(Button)findViewById(R.id.button2); 


     selector(b1, R.drawable.image_1_2, R.drawable.image_1); 
     // selector(b2, R.drawable.image_2_2, R.drawable.image_2); 


    } 

    public void selector(Button b,int pressed_image,int normal_image) 
    { 
     StateListDrawable states = new StateListDrawable(); 
     states.addState(new int[] {android.R.attr.state_pressed}, 
      getResources().getDrawable(pressed_image));   
     states.addState(new int[] { }, 
      getResources().getDrawable(normal_image));  
     b.setBackgroundDrawable(states); 
    } 
0

我必須說,你可以使用(觸摸聽者)該如何U使用觸摸聽者

image=(ImageView)findViewById(R.id.image); 

找到烏爾圖像第一

添加觸摸聽者到烏爾圖像

image.setOnTouchListener(image_onTouch); 

//添加觸摸方法,它是通過名字image_onTouch

OnTouchListener image_onTouch=new OnTouchListener(){ 
    @Override 
    public boolean onTouch(View arg0,MotionEvent arg1){ 
     int iAction=arg1.getAction(); 

     if(iAction==0){ 
      image.setImageResource(R.drawable.image1); 
     } 
     else{ 
      image.setImageResource(R.drawable.image2); 
     } 
     return false; 
    } 
}; 

//圖片1是烏爾圖像其中U要2點擊圖片2是圖像,當你觸摸的形象,你必須做的另一個背景顏色你想要顯示並在代碼中使用它的圖像

0

我以前也有這樣的問題。我解決了將這個XML文件放在Res instaed drawable-mdpi或其他文件夾中的單獨的可繪製文件夾中。並確保您必須將此Xml作爲按鈕的背景。

1

只是覆蓋View.setPressed:

@Override 
public void setPressed(boolean pressed) { 
    super.setPressed(pressed); 
    ... 
}