RadioButton
とCheckBox
をLinearLayout
にプログラムで作成しました。しかし、今、ラジオボタンの色とチェックボックスの色を変更したいと思います。私が使う
RadioButton.setHighlightColor(Color.parseColor("#0c83bd"));
checkbox.setHighlightColor(Color.parseColor("#0c83bd"));
しかし、それはうまくいきませんでした。
これを試して
AppCompatRadioButton newRadioButton = new AppCompatRadioButton(this);
AppCompatCheckBox newCheckBox = new AppCompatCheckBox(this);
の代わりに
RadioGroup newRadioButton = new RadioGroup(this);
CheckBox newCheckBox = new CheckBox(this);
CheckBoxおよびRadioButtonの代わりにAppCompatCheckBoxおよびAppCompatRadioButtonを使用します。 あなたのxmlは:を持ちます
<Android.support.v7.widget.AppCompatCheckBox
Android:id="@+id/cbSelected"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:backgroundTint="@color/colorAccent" //This to set your default button color
Android:checked="true"/>
<Android.support.v7.widget.AppCompatRadioButton
Android:id="@+id/rb"
app:buttonTint="@color/colorAccent" //This to set your default button color
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"/>
Java code:Create ColorStateListの場合
ColorStateList colorStateList = new ColorStateList(
new int[][]{
new int[]{Android.R.attr.state_enabled} //enabled
},
new int[] {getResources().getColor(R.color.colorPrimary) }
);
AppCompatRadioButtonまたはAppCompatCheckBoxのプログラムで色を変更するには、setSupportButtonTintListを呼び出します。
AppCompatRadioButton radioButton = (AppCompatRadioButton) findViewById(R.id.rb);
radioButton.setSupportButtonTintList(colorStateList);
AppCompatCheckBox cbSelected = (AppCompatCheckBox) findViewById(R.id.cbSelected);
cbSelected.setSupportButtonTintList(colorStateList);
次のように動的なRadioButton
を作成できます。
RadioButton male = new RadioButton(ReservationContact.this);
male.setTextColor(Color.BLACK);
male.setText("Male");
male.setSelected(true);
male.setId(0);
RadioButton
の円のデフォルト色を変更するために使用されます。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
male.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(ReservationContact.this, R.color.background)));
}
male.setHighlightColor(getResources().getColor(R.color.background));
CheckBox
の場合、CheckBox
をAppCompatCheckBox
に置き換えて、次のメソッドを呼び出します。
public static void setCheckBoxColor(AppCompatCheckBox checkBox, int uncheckedColor, int checkedColor) {
ColorStateList colorStateList = new ColorStateList(
new int[][] {
new int[] { -Android.R.attr.state_checked }, // unchecked
new int[] { Android.R.attr.state_checked } // checked
},
new int[] {
uncheckedColor,
checkedColor
}
);
checkBox.setSupportButtonTintList(colorStateList);
}
RadioButton
についても同様だと思います。 Android.R.attr
で宣言された属性を確認し、コードを変更できます。
RadioButton rb=(RadioButton) findViewById(R.id.radioButton1);
rb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
rb.setButtonDrawable(R.drawable.image);
rb.setHighlightColor(Color.parseColor("#0c83bd"));
}
});
}
私はywwynmの答えを続けています。
GoogleはsetSupportButtonTintListを制限したため、使用できません。
回避策は、メソッドが制限されていないボタンをTintableCompoundButtonインターフェースとして使用することです。
AppCompatRadioButtonのAPI 19以降で動作します。 AppCompatCheckboxは同じインターフェイスを実装しているため、理論的には機能するはずですが、テストしていません。
楽しんで :)
public static void setAppCompatRadioButtonColor(AppCompatRadioButton radioButton, int uncheckedColor, int checkedColor) {
ColorStateList colorStateList = new ColorStateList(
new int[][] {
new int[] { -Android.R.attr.state_checked }, // unchecked
new int[] { Android.R.attr.state_checked } // checked
},
new int[] {
uncheckedColor,
checkedColor
}
);
((TintableCompoundButton) radioButton).setSupportButtonTintList(colorStateList);
}