Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java在Android中生成每个项目具有不同背景颜色的微调器?_Java_Android_Android Spinner_Background Color - Fatal编程技术网

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

如何使用Java在Android中生成每个项目具有不同背景颜色的微调器?,java,android,android-spinner,background-color,Java,Android,Android Spinner,Background Color,我想在Java中生成一个用于颜色选择的微调器,下拉时应该是这样的: 我的Java代码现在如下所示: final Spinner spinner = new Spinner(context); String[] colors = new String[]{"[1]", "[2]", "[3]", "[4]", "[5]", "[6]"}; final List<String> colorsList = new ArrayList<>(Arrays.

我想在Java中生成一个用于颜色选择的微调器,下拉时应该是这样的:

我的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;
      }
    };
  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)};
最终微调器微调器=新微调器(上下文);
字符串[]颜色=新字符串[]{“[1]”、“[2]”、“[3]”、“[4]”、“[5]”、“[6]”;
最终列表colorsList=新的ArrayList(Arrays.asList(colors));
最终ArrayAdapter SpinnerayAdapter=新的ArrayAdapter(上下文,android.R.layout.simple\u微调器\u项,颜色列表){
@凌驾
公共视图getDropDownView(int位置、视图转换视图、视图组父视图){
视图=super.getDropDownView(位置、转换视图、父级);
TextView tv=(TextView)super.getDropDownView(位置、转换视图、父级);
Color Color=Color.rgb(18,18218);
开关(位置){
案例0:
color=color.rgb(28158218);
打破
案例1:
color=color.rgb(218,58218);
打破
案例2:
color=color.rgb(128,18,28);
打破
}
返回视图;
}
};

但现在没有显示颜色,全部为白色。有什么更好的方法吗?

而不是
TextView
BackgroundColor
设置为
view
在此旁边如果要为所选视图着色,则还必须覆盖
getView
。检查以下内容:

@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;
}
输出:

我是这样做的:

    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;
      }
    };
  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)};

最终微调器微调器=新微调器(上下文);
字符串[]颜色=新字符串[]{“[1]”、“[2]”、“[3]”、“[4]”、“[5]”、“[6]”;
最终列表colorsList=新的ArrayList(Arrays.asList(colors));
最终ArrayAdapter SpinnerayAdapter=新的ArrayAdapter(上下文,android.R.layout.simple\u微调器\u项,颜色列表)
{
@凌驾
公共视图getDropDownView(int位置、视图转换视图、视图组父视图)
{
视图=super.getDropDownView(位置、转换视图、父级);
TextView tv=(TextView)super.getDropDownView(位置、转换视图、父级);
view.setBackgroundColor(itemColor[位置]);
返回视图;
}
};
spinnerrayadapter.setDropDownViewResource(android.R.layout.simple\u微调器\u项);
spinner.setAdapter(SpinNearrayaAdapter);
spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener()
{
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id)
{
((TextView)parent.getChildAt(0)).setBackgroundColor(itemColor[position]);
}
@凌驾
未选择公共无效(AdapterView父级)
{
}
});

Nice and clean方法将是自定义适配器。很好,下拉时看起来不错,但在我选择它后,颜色没有显示,如何修复?要实现这一点,您还必须覆盖
getView
。检查我的最新答案为什么你把这个复杂化而不是我的简单解决方案?这有什么区别吗?