禁用複選框的觸摸事件我有一個layout
與幾個複選框。當一個複選框被檢查時,其他複選框被設置爲CHECKED=true
和ENABLED=false
。現在我希望用戶能夠點擊任何禁用的複選框,如果他這樣做,一個被設置爲啓用和檢查,所有其他都被禁用。如何檢測在android
當複選框設置爲ENABLED=false
時,onTouchListener
以及onClickListener
似乎不會被調用。誰能幫忙?
禁用複選框的觸摸事件我有一個layout
與幾個複選框。當一個複選框被檢查時,其他複選框被設置爲CHECKED=true
和ENABLED=false
。現在我希望用戶能夠點擊任何禁用的複選框,如果他這樣做,一個被設置爲啓用和檢查,所有其他都被禁用。如何檢測在android
當複選框設置爲ENABLED=false
時,onTouchListener
以及onClickListener
似乎不會被調用。誰能幫忙?
通常,這種情況的行爲是Android中的一個問題。你可能可以做的一件事是把CheckBox
從ViewGroup
(例如FrameLayout
等許多佈局之一)的東西中刪除,並使用setOnClickListener
就可以了。
這很好用,但是,Click事件不僅僅是從佈局生成的。這意味着,如果我點擊複選框,它仍然不會傳播。是否有任何設置可以使整個佈局可點擊? –
您無法接收禁用的複選框上的事件。如果您將禁用複選框放置在類似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;
}
});
希望這有助於你
怎麼樣聽衆ChkBx.setOnCheckedChangeListener ..是否被調用? – Gridtestmail
enabled = false表示該複選框根本無法點擊。聽起來對我而言,你想要做的只是將檢查改爲false。你有沒有考慮過使用單選按鈕?如果您只需要選擇一個項目,可能是更好的解決方案。 – TofferJ
用戶爲什麼要點擊禁用的複選框?我相信用戶不會理解這個「功能」:) – dit