2011-11-14 33 views
0

我在使用Android中的一個按鈕時遇到了一個奇怪的行爲。不可點擊的按鈕進入onClick方法

我創建了一個自定義按鈕(MyButton),並在其上放置了一些方法來擴展deafult View,例如添加禁用/啓用方法來更改按鈕。

這裏是myButton的代碼:

public class MyButton extends Button { 
    /** Enabled. */ 
    private boolean enabled = true; 

    /** The default bg. */ 
    private Drawable defaultBG = null; 

    /** The disabled drawable. */ 
    private int disabledDrawable = 0; 

    /******************/ 
    /** CONSTRUCTORS **/ 
    /**  [...] **/ 
    /******************/ 

    /** 
    * Disable. 
    */ 
    public void disable() 
    { 
     this.setClickable(false); 
     this.setFocusable(false); 
     Log.d("MY_BUTTON", "DISABLED!!"); 
     if(!enabled || disabledDrawable == 0) 
      return; 

     defaultBG = this.getBackground(); 
     this.setBackgroundResource(disabledDrawable); 

     enabled = false; 
    } 

    /** 
    * Enable. 
    */ 
    public void enable() 
    { 
     this.setClickable(true); 
     this.setFocusable(true); 
     Log.d("MY_BUTTON", "ENABLED!!"); 
     if(enabled) 
      return; 

     this.setBackgroundDrawable(defaultBG); 

     enabled = true; 
    } 
} 

這裏是佈局我的按鈕聲明:

<com.xxxx.library.View.MyButton 
        android:id="@+id/buttonVideo" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="5dp" 
        android:text="@string/upload_camera_video" /> 

,這就是我在我的活動做:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    setContentView(R.layout.upload); 
    super.onCreate(savedInstanceState); 
    cameraVideo = (MyButton) findViewById(R.id.buttonVideo); 
    cameraVideo.setDisabledBG(R.drawable.disabled_buttons); 
    cameraVideo.diable(); 

    cameraVideo.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      if(!v.isClickable()) 
      { 
       log("NOT CLICKABLE!!!"); 
       return; 
      } 

      log("CLICKABLE!!!"); 
     } 
    }); 
} 

而且在logcat中的結果是這樣的:

11-14 11:33:37.681: D/MY_BUTTON(6800): DISABLED!! 
11-14 11:33:43.446: D/UploadActivity(6800): CLICKABLE!!! 

這些按鈕似乎被禁用,但仍然接受點擊事件,雖然它具有禁用的背景我分配給它,它不可聚焦。

回答

4

您需要使用方法setEnabled(false)來禁用該按鈕。

+0

謝謝,工作。但是,setClickable的目的是什麼? – SERPRO

+1

setClickable按照您的想法工作,但您調用setOnClickListener,並且這不僅會設置回調,還會使其再次可點擊。 (去過也做過 :) – H9kDroid