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

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

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

Я попробовал «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>

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


person kevz    schedule 10.05.2016    source источник
comment
Пробовали программно менять?   -  person Jay Rathod RJ    schedule 10.05.2016
comment
@jaydroider: не могли бы вы дать мне пример кода?   -  person kevz    schedule 10.05.2016
comment
Проверьте мой ответ ниже. я использую его в одном из моих приложений.   -  person Jay Rathod RJ    schedule 10.05.2016
comment
Взгляните сюда: stackoverflow.com/a/28981942/4283005   -  person dev.bmax    schedule 10.05.2016


Ответы (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();
        }
    }
}

Примечание. Меняйте цвет по своему усмотрению.

person Jay Rathod RJ    schedule 10.05.2016
comment
я посмотрю на это - person kevz; 10.05.2016
comment
цвет дорожки становится бледным, когда я активирую переключатель. например: я меняю цвет дорожки на КРАСНЫЙ, когда переключатель активен, но он отображается розовым. - person kevz; 10.05.2016
comment
любой стиль добавляется для переключения, затем удаляется. - person Jay Rathod RJ; 10.05.2016
comment
Попробуйте получить цвет, используя ресурсы. определяется кодом hax в color.xml. - person Jay Rathod RJ; 10.05.2016
comment
попробуйте отредактированную часть. первая часть работает для меня. но так как у вас есть проблемы с этим. попробуйте проверить отредактированную функцию. - person Jay Rathod RJ; 10.05.2016
comment
Также проверьте и измените версию build sdk на kitkat в первой части и попробуйте. - person Jay Rathod RJ; 10.05.2016
comment
Брат, я не могу предположить сейчас. может быть, это поможет проверить этот stackoverflow.com/questions/28981164/ - person Jay Rathod RJ; 10.05.2016
comment
Давайте продолжим обсуждение в чате. - person Jay Rathod RJ; 10.05.2016
comment
Это помогло мне в некоторой степени настроить переключатель. Tnx много :) - person kevz; 10.05.2016
comment
это даст вам то, что вы хотите, может быть, некоторые изменения в моем коде, чтобы получить его, братан. - person Jay Rathod RJ; 10.05.2016