自定义无线电控制,在Android中填充颜色
问题描述:
我想在android xml中制作下面的UI。我google搜索,但没有找到任何好的结果。自定义无线电控制,在Android中填充颜色
我想拥有可以设置可以填充颜色的圆圈吗?
我将会有这样的数组[“红色”,“灰色”,“黄色”,...],并希望在以下控件中呈现这些颜色。当我选择任何一种颜色时,它应该给它的价值。就像选择“红色”时,它应该给我选择“红色”值。
答
这就是我所做的,但它不会像单选按钮一样工作。
首先加入你想要的颜色值/ colors.xml文件
<color name="red">#d50000</color>
<color name="green">#33691e</color>
<color name="blue">#304ffe</color>
添加此circle.xml绘制绘制文件夹内。这个drawable将在运行时设置为视图的背景(颜色按钮)。
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
android:color="#000000"/>
<size
android:width="24dp"
android:height="24dp"/>
</shape>
在布局文件中添加一个ViewGroup中(前的LinearLayout),其中将包含颜色按钮(在运行时添加)。为引用设置视图组的ID。
这里是我做了什么
<LinearLayout
android:id="@+id/container"
android:padding="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
</LinearLayout>
现在你必须添加代码,这将增加颜色的按钮上用onclick听众。
内,您的活动类添加一个int数组将举行颜色资源值
int[] colors = {R.color.blue, R.color.red,R.color.green};
添加另一个int变量用于存储所选择的颜色值
int selected_color;
现在,在您的活动类添加这个方法这将为OnClick监听器添加颜色视图(按钮)。当单击一个颜色视图时,它将把颜色存储在selected_color变量中。
public void addColorChoices() {
LinearLayout container = (LinearLayout) findViewById(R.id.container);
int hw = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources().getDisplayMetrics());
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(hw,hw);
int m = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12, getResources().getDisplayMetrics());
lp.setMargins(m,m,m,m);
View v;
for(final int color: colors) {
v = new View(this);
v.setBackground(getDrawable(R.drawable.circle));
v.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(color)));
v.setLayoutParams(lp);
v.setId(View.generateViewId());
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
selected_color = color;
Toast.makeText(getApplicationContext(),"Selected Color: " + getResources().getResourceEntryName(selected_color),Toast.LENGTH_SHORT).show();
}
});
container.addView(v);
}
}
要添加更多颜色选择,只需在数组中添加颜色即可。从您的活动的OnCreate()方法调用此方法。
我不明白为什么人们投票。如果问题不好或需要一些编辑,那么他们可以建议。我认为这是有效的问题和需求解决方案。可能是问题话题不好解释。我对此表示歉意。但请帮助我。谢谢。 –
不知道这与查找值[红色,灰色等]或您是否要求自定义视图不同。无论从[我可以问什么主题?](https://*.com/help/on-topic)'要求我们推荐或找到书籍,工具,软件库,教程或其他非现场资源,话题' –
嗨@MorrisonChang,我编辑了这个问题。希望能够澄清这个问题。 –