简体   繁体   English

如何在Android中使用Java在每个项目中生成具有不同背景颜色的微调器?

[英]How to generate a spinner in Android with different background color in each item with Java?

I want to generate a spinner in Java for color selection, it should look like this when drops down:我想在 Java 中生成一个用于颜色选择的微调器,下拉时它应该是这样的:

在此处输入图片说明

My Java code now looks like this :我的 Java 代码现在看起来像这样:

    final Spinner spinner = new Spinner(context);
    String[] colors = new String[]{"[1]", "[2]", "[3]", "[4]", "[5]", "[6]"};
    final List<String> colorsList = new ArrayList<>(Arrays.asList(colors));
    final ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, colorsList) {
      @Override
      public View getDropDownView(int position, View convertView, ViewGroup parent) {
        View view = super.getDropDownView(position, convertView, parent);
        TextView tv = (TextView) super.getDropDownView(position, convertView, parent);
        Color color = Color.rgb(18,18,218);
        switch(position){
           case 0:
              color = Color.rgb(28,158,218); 
              break;
           case 1:
              color = Color.rgb(218,58,218); 
              break;
           case 2:
              color = Color.rgb(128,18,28); 
              break;
        }
        return view;
      }
    };

But now no color is shown, all white.但是现在没有显示颜色,全是白色。 What would be a better way to do it?什么是更好的方法呢?

Instead of TextView set BackgroundColor to view .而不是TextViewBackgroundColor设置为view Beside this If you want to colorize the selected view, then you also have to override getView .除此之外,如果要为所选视图着色,则还必须覆盖getView Check below:检查以下:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    return getCustomView(position, convertView, parent);
}

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
    return getCustomView(position, convertView, parent);
}

private View getCustomView(int position, View convertView, ViewGroup parent) {
    View view = super.getDropDownView(position, convertView, parent);

    if (position % 2 == 1) {
        view.setBackgroundColor(Color.parseColor("#FFC3C0AA"));
    }
    else {
        view.setBackgroundColor(Color.parseColor("#FFB5DCE8"));
    }

    return view;
}

Output:输出:

在此处输入图片说明

I did it like this :我是这样做的:

  int itemColor[] = new int[]{Color.rgb(188,108,218),
                              Color.rgb(88,18,218),
                              Color.rgb(18,108,28),
                              Color.rgb(18,108,118),
                              Color.rgb(218,88,218),
                              Color.rgb(138,108,118)};

... ...

final Spinner spinner = new Spinner(context);
String[] colors = new String[]{"[1]", "[2]", "[3]", "[4]", "[5]", "[6]"};
final List<String> colorsList = new ArrayList<>(Arrays.asList(colors));
final ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, colorsList)
{
  @Override
  public View getDropDownView(int position, View convertView, ViewGroup parent)
  {
    View view = super.getDropDownView(position, convertView, parent);
    TextView tv = (TextView) super.getDropDownView(position, convertView, parent);
    view.setBackgroundColor(itemColor[position]);
    return view;
  }
};

spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
spinner.setAdapter(spinnerArrayAdapter);

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
  @Override
  public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
  {
    ((TextView) parent.getChildAt(0)).setBackgroundColor(itemColor[position]);
  }

  @Override
  public void onNothingSelected(AdapterView<?> parent)
  {

  }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM