在android中填充颜色的自定义无线电控制

时间:2017-10-29 01:27:01

标签: java android xml android-layout

我想在android xml中制作以下UI。我用谷歌搜索,但没有找到任何好结果。

我希望有一组可以填充颜色的圆圈?

我会有这样的数组[" Red"," Gray"," Yellow",...]并希望在下面呈现这些颜色控制。当我选择任何一种颜色时,它应该赋予它的价值。就像" Red"被选中它应该给我" Red"值已选中。

谢谢。enter image description here

1 个答案:

答案 0 :(得分:1)

这就是我所做的,但它不像单选按钮那样工作。

首先在values / colors.xml文件中添加所需的颜色

<color name="red">#d50000</color>
<color name="green">#33691e</color>
<color name="blue">#304ffe</color>

在drawable文件夹中添加此circle.xml drawable。此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(ex 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监听器添加彩色按钮。

在您的activity类中添加一个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()方法中调用此方法。