2017-10-29 114 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()方法調用此方法。