209

ICS アプリで holo.light テーマの標準のスイッチ コントロールを使用しています。

トグル ボタンの強調表示またはオン状態の色を、標準の水色から緑に変更したいと考えています。

これは簡単なはずですが、どうすればよいかわかりません。

4

24 に答える 24

124

現時点では、AppCompat.v7 ライブラリの SwitchCompat を使用することをお勧めします。次に、単純なスタイリングを使用して、コンポーネントの色を変更できます。

values/themes.xml:

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">
    <!-- colorPrimary is used for the default action bar background -->
    <item name="colorPrimary">@color/my_awesome_color</item>

    <!-- colorPrimaryDark is used for the status bar -->
    <item name="colorPrimaryDark">@color/my_awesome_darker_color</item>

    <!-- colorAccent is used as the default value for colorControlActivated,
         which is used to tint widgets -->
    <item name="colorAccent">@color/accent</item>

    <!-- You can also set colorControlNormal, colorControlActivated
         colorControlHighlight, and colorSwitchThumbNormal. -->

</style>

ref: Android デベロッパー ブログ

編集

これを正しく適用する方法はスルーandroid:theme="@style/Theme.MyTheme" であり、これは EditTexts、RadioButtons、Switches、CheckBoxes、ProgressBars などの親スタイルにも適用できます。

<style name="My.Widget.ProgressBar" parent="Widget.AppCompat.ProgressBar">

<style name="My.Widget.Checkbox" parent="Widget.AppCompat.CompoundButton.CheckBox">
于 2014-11-03T10:41:26.633 に答える
48

style.xml または Java コードを使用せずにスイッチ スタイルを変更するには、スイッチをレイアウト XML にカスタマイズできます。

<Switch
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:thumbTint="@color/blue"
        android:trackTint="@color/white"
        android:checked="true"
        android:layout_height="wrap_content" />

色をカスタマイズできるのは属性android:thumbTintandroid:trackTintです

これは、この XML の視覚的な結果です。

ここに画像の説明を入力

于 2016-09-14T08:45:44.183 に答える
37

カスタム Switch を作成し、setChecked をオーバーライドして色を変更します。

  public class SwitchPlus extends Switch {

    public SwitchPlus(Context context) {
        super(context);
    }

    public SwitchPlus(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SwitchPlus(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void setChecked(boolean checked) {
        super.setChecked(checked);
        changeColor(checked);
    }

    private void changeColor(boolean isChecked) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            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();
            }
        }
    }
}
于 2015-07-15T18:06:57.220 に答える
30

SubChord による回答は正しいですが、他のウィジェットにも影響を与えずに「オン」の色を設定する方法の質問には実際には答えません。これを行うにはThemeOverlay、styles.xml でa を使用します。

<style name="ToggleSwitchTheme" parent="ThemeOverlay.AppCompat.Light">
    <item name="colorAccent">@color/green_bright</item>
</style>

そして、あなたのスイッチでそれを参照してください:

<android.support.v7.widget.SwitchCompat
  android:theme="@style/ToggleSwitchTheme" ... />

そうすることで、適用したいビューの色にのみ影響します。

于 2016-05-25T16:02:01.420 に答える
20

スイッチの状態が変わったときにカラーフィルターを更新することで解決しました...

public void bind(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);
    }
}
于 2015-08-11T18:42:47.020 に答える
13

少し遅いかもしれませんが、スイッチ ボタンの場合、toogle ボタンは答えではありません。スイッチの xml パラメータでドローアブルを変更する必要があります。

 android:thumb="your drawable here"
于 2013-07-03T22:45:49.543 に答える
9

Android Lollipop 以降では、テーマ スタイルで定義します。

<style name="BaseAppTheme" parent="Material.Theme">
    ...
    <item name="android:colorControlActivated">@color/color_switch</item>
</style>
于 2016-01-28T10:24:56.840 に答える
7

独自の 9 パッチ画像を作成し、トグル ボタンの背景として設定します。

http://radleymarx.com/2011/simple-guide-to-9-patch/

于 2012-06-28T22:09:26.023 に答える
1

ここで正しい答えを見つけてみてください: Selector on background color of TextView。一言で言えば、色付きの XML で Shape を作成し、それをセレクターで「チェック済み」の状態に割り当てる必要があります。

于 2013-07-11T10:06:20.203 に答える
1

xml では、次のように色を変更できます。

 <androidx.appcompat.widget.SwitchCompat
    android:id="@+id/notificationSwitch"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:checked="true"
    app:thumbTint="@color/darkBlue"
    app:trackTint="@color/colorGrey"/>

次のように動的に変更できます。

Switch.thumbDrawable.setColorFilter(ContextCompat.getColor(requireActivity(), R.color.darkBlue), PorterDuff.Mode.MULTIPLY)
于 2020-07-02T14:45:19.833 に答える
-2

Android Studio 3.6 のソリューション:

yourSwitch.setTextColor(getResources().getColor(R.color.yourColor));

カラー XML ファイルで定義された値 (yourColor) の a のテキストの色を変更します。

于 2020-03-09T06:54:37.863 に答える