我正在处理一个需要在运行时动态更改复选框样式的项目,我已经浏览了视线中列出的许多其他选项,但是,其中大多数需要创建对象的新实例,这在我的情况下是不可能的,对这种困境的任何见解都会很棒!
如果在运行时有复选框对象,则可以动态编辑它。例如,您可以检查它
myCheckBox.setChecked(true);
如果您处于相同的上下文中,则可以像这样更改颜色:
适用于安卓<23
int states[][] = {{android.R.attr.state_checked}, {}};
int colors[] = {ctx.getResources().getColor(R.color.myCheckedCheckboxColor),ctx.getResources().getColor(R.color.myUncheckedCheckboxColor)};
CompoundButtonCompat.setButtonTintList(myCheckBox,new ColorStateList(states,colors));
对于安卓>=23
int states[][] = {{android.R.attr.state_checked}, {}};
int colors[] = {ctx.getResources().getColor(R.color.myCheckedCheckboxColor),ctx.getResources().getColor(R.color.myUncheckedCheckboxColor)};
myCheckBox.setForegroundTintList(new ColorStateList(states,colors)); // <-- requires @TargetApi(23)
CompoundButtonCompat.setButtonTintList(myCheckBox,new ColorStateList(states,colors));
您也可以像这样编辑其他样式属性。 我不知道您是否需要自己设置所有属性,或者您是否可以将新样式作为简单的单行应用......
更新:
实现它有点像这样: 进入/res/values/文件夹并添加两种新颜色.xmlmyCheckedCheckboxColor
myUncheckedCheckboxColor
(或在运行时对新的 Color 元素进行编程(
public class MainActivity extends AppCompatActivity ... {
Context ctx = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ctx = MainActivity.this;
...
}
protected void changeColorOfCheckBox(CheckBox myCheckBox){
int osVersion = Build.VERSION.SDK_INT;
if(osVersion>=23){
changeColorOfCheckBox23(myCheckBox);
}
else{
int states[][] = {{android.R.attr.state_checked}, {}};
int colors[] = {ctx.getResources().getColor(R.color.myCheckedCheckboxColor),ctx.getResources().getColor(R.color.myUncheckedCheckboxColor)};
CompoundButtonCompat.setButtonTintList(myCheckBox,new ColorStateList(states,colors));
}
}
@TargetApi(23)
protected void changeColorOfCheckBox23(CheckBox myCheckBox){
int states[][] = {{android.R.attr.state_checked}, {}};
int colors[] = {ctx.getResources().getColor(R.color.myCheckedCheckboxColor),ctx.getResources().getColor(R.color.myUncheckedCheckboxColor)};
myCheckBox.setForegroundTintList(new ColorStateList(states,colors)); // <-- requires @TargetApi(23)
CompoundButtonCompat.setButtonTintList(myCheckBox,new ColorStateList(states,colors));
}
}