2011-04-29 89 views
4

我有一個ToggleButton,當你點擊它時,我不想讓狀態改變。當我收到來自按鈕切換的反饋後,我會自己處理狀態更改。我怎樣才能防止點擊狀態變化?防止ToggleButton開關狀態

+0

我用tgl.setChecked(!tgl.isChecked());在我的onClick監聽器中。 (tgl os ToggleButton視圖) – 2016-03-02 19:54:23

回答

0

雖然我認爲你可以將它標記爲禁用,但我不認爲這是一個好主意,因爲用戶習慣於這種按鈕的某種語義。

如果您只想顯示某種狀態,爲什麼不使用ImageView並根據狀態顯示不同的圖像?

4

您可以實施自己的ToggleButton,並使用空體覆蓋toggle()方法。

1

您可以簡單地使用CheckedTextView代替。

當然,您需要根據狀態設置背景圖像和文本,但除了那些(您可能已經使用過)以外,這是一個很好的替代解決方案。

這裏的情況下,示例代碼你錯過了紋元和textOff屬性:

CheckableTextView.java:

public class CheckableTextView extends CheckedTextView { 
    private CharSequence mTextOn, mTextOff; 

    public CheckableTextView (final Context context, final AttributeSet attrs, final int defStyle) { 
     super(context, attrs, defStyle); 
     final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CheckableTextView, defStyle, 0); 
     mTextOn = a.getString(R.styleable.CheckableTextView_textOn); 
     mTextOff = a.getString(R.styleable.CheckableTextView_textOff); 
     a.recycle(); 
    } 

    public CheckableTextView(final Context context, final AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public CheckableTextView(final Context context) { 
     this(context, null, 0); 
    } 

    @Override 
    public void setChecked(final boolean checked) { 
     super.setChecked(checked); 
     if (mTextOn == null && mTextOff == null) 
      return; 
     if (checked) 
      super.setText(mTextOn); 
     else 
      super.setText(mTextOff); 
    } 

    public void setTextOff(final CharSequence textOff) { 
     this.mTextOff = textOff; 
    } 

    public void setTextOn(final CharSequence textOn) { 
     this.mTextOn = textOn; 
    } 

    public CharSequence getTextOff() { 
     return this.mTextOff; 
    } 

    public CharSequence getTextOn() { 
     return this.mTextOn; 
    } 


} 
在res /價值/ attr.xml

<declare-styleable name="SyncMeCheckableTextView"> 
    <attr name="textOn" format="reference|string" /> 
    <attr name="textOff" format="reference|string" /> 
</declare-styleable> 

另一可能的解決方案是在ToggleButton上使用setClickable(false),並在動作動作爲ACTION_UP時處理onTouchListener。