我正在使用以下(非常常见)代码来更改 Android 应用程序中的复选框图像。
mCheck = (CheckBox) findViewById(R.id.chkMine);
mCheck.setButtonDrawable(R.drawable.my_image);
我看到很多人都这么要求。但我从未见过第二部分:
How do I put BACK the original checkbox imagery, later in my code?
我犹豫是否要尝试设计自己的所有图像(选中、未选中、重影选中、重影未选中等),因为我需要通常出现在许多不同版本的 Android 上的原始图像。
也许,最初使用(不存在?) getButtonDrawable() 调用保存默认图像,然后稍后重用它?
我认为这就像第二次调用 setButtonDrawable() 来“撤消”我的更改一样简单。或者是吗?
Thanks.
正如您已经正确地提到自己一样,不幸的是没有getButtonDrawable()
在替换之前获取对所使用的可绘制对象的引用。显然,您可以将 Android 的资源复制到本地项目并使用它们来重置CheckBox
的按钮,但这意味着您必须考虑主题的所有不同样式,更不用说设备制造商可能对这些资源进行的任何更改。沿着这条路走并非不可能,但你会发现,对于听起来很简单的事情来说,这将是相当麻烦的。
您可能需要考虑执行以下操作:查询资源以获取您需要的可绘制对象的资源 ID。这样您就不必明确地处理不同的主题,因为查找会这样做。只需几行代码,您就可以轻松地将此功能放入专用方法中。例子:
private static int getDefaultCheckBoxButtonDrawableResourceId(Context context) {
// pre-Honeycomb has a different way of setting the CheckBox button drawable
if (Build.VERSION.SDK_INT <= 10) return Resources.getSystem().getIdentifier("btn_check", "drawable", "android");
// starting with Honeycomb, retrieve the theme-based indicator as CheckBox button drawable
TypedValue value = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.listChoiceIndicatorMultiple, value, true);
return value.resourceId;
}
下面是一个将按钮可绘制设置为某些自定义图像并随后重置的快速示例。每当检查状态发生变化时,我只是在应用程序图标和原始按钮可绘制之间切换。
CheckBox mCheckBox = (CheckBox) findViewById(R.id.checkbox);
mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override public void onCheckedChanged(CompoundButton button, boolean isChecked) {
button.setButtonDrawable(isChecked ? R.drawable.icon : getDefaultCheckBoxButtonDrawableResourceId(StackOverflowActivity.this));
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)