Как настроить переключатель в Android?

Я хочу настроить переключатель, как показано на рисунке ниже.

Пользовательский переключатель

Я пробовал SwitchCompat, но не могу настроить его как изображение. Ниже приведен код.

<style name="CustomSwitchStyle" parent="Theme.AppCompat.Light.NoActionBar">
    ...
    <!-- Active thumb color & Active track color(30% transparency) -->
    <item name="colorControlActivated">@color/white</item>
    <!-- Inactive thumb color -->
    <item name="colorSwitchThumbNormal">@color/white</item>
    <!-- Inactive track color(30% transparency) -->
    <item name="android:colorForeground">@android:color/darker_gray</item>
</style>

Я также пытался использовать виджет "Переключатель", но он не выглядит как требуемый пользовательский переключатель.

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();
        }
    }
}

Примечание: измените цвет, как вы хотите.

Другие вопросы по тегам