首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >多状态切换按钮

多状态切换按钮
EN

Stack Overflow用户
提问于 2011-01-28 09:18:05
回答 4查看 36.2K关注 0票数 19

在我一直在开发的应用程序中,我希望有一个多状态(在我的例子中是三个)切换按钮,而不是ToggleButton提供的两个切换按钮。我试着开始自己的扩展Button,遵循CompoundButton源代码,但老实说,阅读它的源代码有点令人不知所措。

有没有一种方法可以只使用选择器xml或其他东西来实现三态切换按钮,或者是另一种我没有想到的方法?我完全不知道该怎么做。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-28 09:30:08

当然,您可以定义一个选择器作为具有三个条目的背景。问题是您可以为选择器使用哪些按钮属性。您可以有两个布尔属性,例如A和B,并根据A、B和default定义选择器。(A && B将满足A,因此更确切地说,它们可以被认为是A、!A && B和!A &&!B。)您可以重载现有属性(选定属性、聚焦属性等)或者,更优雅地,使用in this thread描述的方法定义您自己的自定义属性。

票数 10
EN

Stack Overflow用户

发布于 2014-01-29 22:44:23

我实现了一个多状态切换按钮,源代码是here

它看起来是这样的:

它非常容易使用:

代码语言:javascript
复制
<org.honorato.multistatetogglebutton.MultiStateToggleButton
    android:id="@+id/mstb_multi_id"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dip"
    mstb:values="@array/planets_array" />

在您的活动中:

代码语言:javascript
复制
MultiStateToggleButton button2 = (MultiStateToggleButton) this.findViewById(R.id.mstb_multi_id);
button2.setOnValueChangedListener(new ToggleButton.OnValueChangedListener() {
    @Override
    public void onValueChanged(int value) {
        Log.d(TAG, "Value: " + value);
    }
});
票数 19
EN

Stack Overflow用户

发布于 2014-10-18 02:20:37

你可以创建一个自定义的ImageButton来实现这一点,在这种情况下,你需要3个不同的图像。如果需要,您还可以添加更多状态。

代码语言:javascript
复制
public class FlashButton extends ImageButton {

    public enum FlashEnum {
        AUTOMATIC, ON, OFF
    }

    public interface FlashListener {
        void onAutomatic();
        void onOn();
        void onOff();
    }

    private FlashEnum mState;
    private FlashListener mFlashListener;

    public FlashButton(Context context, AttributeSet attrs) {
        super(context, attrs);

        //Sets initial state
        setState(FlashEnum.AUTOMATIC);
    }


    @Override
    public boolean performClick() {
        super.performClick();
        int next = ((mState.ordinal() + 1) % FlashEnum.values().length);
        setState(FlashEnum.values()[next]);
        performFlashClick();
        return true;
    }


    private void performFlashClick() {
        if(mFlashListener == null)return;
        switch (mState) {
            case AUTOMATIC:
                mFlashListener.onAutomatic();
                break;
            case ON:
                mFlashListener.onOn();
                break;
            case OFF:
                mFlashListener.onOff();
                break;
        }
    }

    private void createDrawableState() {
        switch (mState) {
            case AUTOMATIC:
                setImageResource(R.drawable.ic_flash_auto);
                break;
            case ON:
                setImageResource(R.drawable.ic_flash_on);
                break;
            case OFF:
                setImageResource(R.drawable.ic_flash_off);
                break;
        }
    }


    public FlashEnum getState() {
        return mState;
    }

    public void setState(FlashEnum state) {
        if(state == null)return;
        this.mState = state;
        createDrawableState();

    }

    public FlashListener getFlashListener() {
        return mFlashListener;
    }

    public void setFlashListener(FlashListener flashListener) {
        this.mFlashListener = flashListener;
    }

}
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4823851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档