2017-10-29 111 views
-5

我想在android xml中制作下面的UI。我google搜索,但没有找到任何好的结果。自定义无线电控制,在Android中填充颜色

我想拥有可以设置可以填充颜色的圆圈吗?

我将会有这样的数组[“红色”,“灰色”,“黄色”,...],并希望在以下控件中呈现这些颜色。当我选择任何一种颜色时,它应该给它的价值。就像选择“红色”时,它应该给我选择“红色”值。

谢谢。 enter image description here

+0

我不明白为什么人们投票。如果问题不好或需要一些编辑,那么他们可以建议。我认为这是有效的问题和需求解决方案。可能是问题话题不好解释。我对此表示歉意。但请帮助我。谢谢。 –

+0

不知道这与查找值[红色,灰色等]或您是否要求自定义视图不同。无论从[我可以问什么主题?](https://stackoverflow.com/help/on-topic)'要求我们推荐或找到书籍,工具,软件库,教程或其他非现场资源,话题' –

+0

嗨@MorrisonChang,我编辑了这个问题。希望能够澄清这个问题。 –

回答

1

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

首先加入你想要的颜色值/ 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()方法调用此方法。