如何自定义android中的开关?

时间:2016-05-10 11:39:52

标签: android switchcompat

我想自定义开关,如下图所示。

Custom switch

我尝试过' SwitchCompat'但无法将其自定义为图像。下面是代码。

<div class="wrap">
  <div class="char">A</div>
  <div class="char">B</div>
  <div class="char">C</div>
  <div class="char">D</div>
  <div class="char">E</div>
</div>

我也试过过&#39; Switch&#39;小部件,但它仍然看起来像所需的自定义开关。

1 个答案:

答案 0 :(得分:1)

尝试以编程方式更改它。

请参阅此内容。

public void switchBind(DetailItem item) {
    switchColor(item.toggle);
    listSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                switchColor(b);
        }
    });
}

private void switchColor(boolean checked) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        listSwitch.getThumbDrawable().setColorFilter(checked ? Color.BLACK : Color.WHITE, PorterDuff.Mode.MULTIPLY);
        listSwitch.getTrackDrawable().setColorFilter(!checked ? Color.BLACK : Color.WHITE, PorterDuff.Mode.MULTIPLY);
    }
}

编辑1:

改变颜色的另一种方式。

private void switchColor(boolean isChecked) {
    if (Build.VERSION.SDK_INT >= 16) {
        int thumbColor;
        int trackColor;

        if(isChecked) {
            thumbColor = Color.argb(255, 253, 153, 0);
            trackColor = thumbColor;
        } else {
            thumbColor = Color.argb(255, 236, 236, 236);
            trackColor = Color.argb(255, 0, 0, 0);
        }

        try {
            getThumbDrawable().setColorFilter(thumbColor, PorterDuff.Mode.MULTIPLY);
            getTrackDrawable().setColorFilter(trackColor, PorterDuff.Mode.MULTIPLY);
        }
        catch (NullPointerException e) {
            e.printStackTrace();
        }
    }
}

注意:根据需要更改颜色。