ICS アプリで holo.light テーマの標準のスイッチ コントロールを使用しています。
トグル ボタンの強調表示またはオン状態の色を、標準の水色から緑に変更したいと考えています。
これは簡単なはずですが、どうすればよいかわかりません。
ICS アプリで holo.light テーマの標準のスイッチ コントロールを使用しています。
トグル ボタンの強調表示またはオン状態の色を、標準の水色から緑に変更したいと考えています。
これは簡単なはずですが、どうすればよいかわかりません。
現時点では、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">
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:thumbTintとandroid:trackTintです
これは、この XML の視覚的な結果です。
カスタム 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();
}
}
}
}
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" ... />
そうすることで、適用したいビューの色にのみ影響します。
スイッチの状態が変わったときにカラーフィルターを更新することで解決しました...
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);
}
}
少し遅いかもしれませんが、スイッチ ボタンの場合、toogle ボタンは答えではありません。スイッチの xml パラメータでドローアブルを変更する必要があります。
android:thumb="your drawable here"
Android Lollipop 以降では、テーマ スタイルで定義します。
<style name="BaseAppTheme" parent="Material.Theme">
...
<item name="android:colorControlActivated">@color/color_switch</item>
</style>
独自の 9 パッチ画像を作成し、トグル ボタンの背景として設定します。
ここで正しい答えを見つけてみてください: Selector on background color of TextView。一言で言えば、色付きの XML で Shape を作成し、それをセレクターで「チェック済み」の状態に割り当てる必要があります。
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)
Android Studio 3.6 のソリューション:
yourSwitch.setTextColor(getResources().getColor(R.color.yourColor));
カラー XML ファイルで定義された値 (yourColor) の a のテキストの色を変更します。