2013-01-04 55 views
2

禁用複選框的觸摸事件我有一個layout與幾個複選框。當一個複選框被檢查時,其他複選框被設置爲CHECKED=trueENABLED=false。現在我希望用戶能夠點擊任何禁用的複選框,如果他這樣做,一個被設置爲啓用和檢查,所有其他都被禁用。如何檢測在android

當複選框設置爲ENABLED=false時,onTouchListener以及onClickListener似乎不會被調用。誰能幫忙?

+0

怎麼樣聽衆ChkBx.setOnCheckedChangeListener ..是否被調用? – Gridtestmail

+1

enabled = false表示該複選框根本無法點擊。聽起來對我而言,你想要做的只是將檢查改爲false。你有沒有考慮過使用單選按鈕?如果您只需要選擇一個項目,可能是更好的解決方案。 – TofferJ

+0

用戶爲什麼要點擊禁用的複選框?我相信用戶不會理解這個「功能」:) – dit

回答

0

通常,這種情況的行爲是Android中的一個問題。你可能可以做的一件事是把CheckBoxViewGroup(例如FrameLayout等許多佈局之一)的東西中刪除,並使用setOnClickListener就可以了。

+1

這很好用,但是,Click事件不僅僅是從佈局生成的。這意味着,如果我點擊複選框,它仍然不會傳播。是否有任何設置可以使整個佈局可點擊? –

0

您無法接收禁用的複選框上的事件。如果您將禁用複選框放置在類似FrameLayout的佈局中,則可以在單擊佈局時但不在禁用複選框中時接收事件。例如,如果要在禁用的複選框上捕獲事件,最好的方法是簡單地模擬禁用的複選框,然後捕獲長點擊事件以再次激活。

我所做的是一個白色文本顏色的複選框,但以灰色文本顏色開頭,並且選中一個布爾終止變量,您將在每個方法上檢查之前的布爾終止變量。除非更改布爾終止變量,否則複選框從不被檢查。你可以多次按複選框,只要你想,沒有任何反應。它只顯示爲禁用,但當您長按一下按鈕時,您將取消阻塞布爾終止變量,並將灰色文本顏色複選框更改爲白色,就像普通複選框一樣。當你想,你可以改變塞變量與 「再次禁用它」

在color.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="white">#FFFFFF</color> 
    <color name="grey">#808080</color> 
</resources> 

main.xml中:

<CheckBox 
     android:id="@+id/checkbox1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="@color/white" 
     android:text="text" /> 

在main.java代碼, onCreate方法:

//define a boolean stopper variable to check on event 
boolean chkActivated = false; 

checkbox = (CheckBox) findViewById(R.id.checkbox1); 
checkbox.setTextColor(getResources().getColorStateList(R.color.grey)); 
checkbox.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() { 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if(chkActivated){ 
      if (isChecked) { 
       //Do everthing you want when checked 
      }else{ 
       //Do everthing you want when unchecked 
      } 
     }else{ 
      checkbox.setChecked(false); 
      Toast.makeText(Activity.this, "It is disabled. to activate press long click"), Toast.LENGTH_SHORT).show(); 
     } 
     } 
}); 

checkbox.setOnLongClickListener(new OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) { 
     chkActivated = true; 
     checkbox.setTextColor(getResources().getColorStateList(R.color.white)); 
     checkbox.setChecked(true); 
     return true; 
    } 
}); 

希望這有助於你