如何在运行时更改小部件的样式 Android 工作室



我正在处理一个需要在运行时动态更改复选框样式的项目,我已经浏览了视线中列出的许多其他选项,但是,其中大多数需要创建对象的新实例,这在我的情况下是不可能的,对这种困境的任何见解都会很棒!

如果在运行时有复选框对象,则可以动态编辑它。例如,您可以检查它

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/文件夹并添加两种新颜色.xmlmyCheckedCheckboxColormyUncheckedCheckboxColor(或在运行时对新的 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));
}
}

相关内容

  • 没有找到相关文章