gpt4 book ai didi

android - 将 Android CheckBox 设置为不同的图像......然后返回原始图像

转载 作者:搜寻专家 更新时间:2023-11-01 08:10:25 24 4
gpt4 key购买 nike

我正在使用以下(非常常见的)代码来更改我的 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() 一样简单,以“撤消”我的更改。或者是?

谢谢。

最佳答案

正如您已经正确提到自己的那样,不幸的是,没有 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));
}
});

关于android - 将 Android CheckBox 设置为不同的图像......然后返回原始图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10235237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com