colourPicker.setOnCheckedChangeListener((group, checkedId) -> {
RadioButton colourOption = colourPicker.findViewById(checkedId);
int colour = Color.parseColor(colourPalette[colourOption.getId()]);
// do whatever you need to do with your picked colour
});
3条答案
按热度按时间mitkmikd1#
您当然可以尝试自定义单选按钮,或者您可以简单地使用或膨胀视图来实现这种颜色选择器。
使用xml:你需要在drawable文件夹中创建两个drawable资源文件。2第一个是这样的,
这适用于你没有收到任何点击的视图(可点击)。第二个文件适用于当我们检测到点击。
现在,在Activity中,需要将背景可绘制对象设置为视图(无论是图像按钮还是图像视图)。操作如下(仅举一例):
}
activity_main的布局如下所示:
然而,使用这种方法,用户最终会为不同的颜色创建多个可绘制对象。为了避免这种情况,我们可以通过编程方式创建可绘制对象,只需编写一次代码,然后使用setColor(int color)方法为不同的颜色使用相同的可绘制对象:
}
The result looks something like this
注意:这个例子只告诉如何实现一个选择器,如在问题中提到的。要创建多个选择器,需要使用LayoutInflater类膨胀视图(图像按钮)。
0yg35tkg2#
我在使用单选按钮时遇到了同样的问题,但后来我自己动手创建了[CustomRadioShapes]**1**Lib。
实施简单。实施:
1.从CustomRadioAndShapes/library文件夹下载aar版本文件
1.在Android Studio文件-〉新建-〉新建模块-〉导入.aar或.jar中
1.选择aar文件和子项目名称作为CustomRadioAndShapes。完成。
jogvjijk3#
替换单选按钮中的可绘制对象
我找到了一种使用原生
RadioButton
的方法。你必须创建你自己的Drawable和Style,然后你就可以开始了。我花了整整一个下午才把它弄对,所以亲爱的可怜的灵魂读到这篇文章-我希望它能有所帮助。以下是您实现以下目标所需的所有资源的列表:
一个月一个月
selector
元素开始)*drawable/colour_picker_checked.xml
tint
而不是color
,否则它们稍后将被断开)*∮ ∮ ∮ ∮
drawable/colour_picker_unchecked.xml
colour_picker_checked.xml
完全匹配,否则选择选项会导致布局偏移)*一个月八个月
一米九一
如何使用它
此时唯一的困难是确定选择了哪个选项。如果颜色列表是固定的,并且不介意硬编码,可以考虑直接在XML中为每个
RadioButton
指定一个android:id
。在我的例子中,我选择以编程方式创建
RadioButton
对象,这使我能够交叉引用来自string-array
资源的颜色。要使其正常工作,您还需要两个额外的资源:
layout/colour_picker_item.xml
values/colors.xml
然后在你的代码中就像这样简单: