【问题标题】:Customizing spinner's item background color自定义微调器的项目背景颜色
【发布时间】:2012-04-29 18:15:28
【问题描述】:

我正在制作一个应用程序来根据其色带计算电阻值。在纯编程方面一切正常。目前,为了选择色带,我正在使用一个充满颜色列表的微调器。

我真的想让它看起来更好。我希望能够将微调器中每个项目的背景颜色设置为相应的颜色:

我应该怎么做才能做到这一点?这是我的代码的一部分:

用于微调器的数组:

  <string-array name="FourBandResistorFullColor">
    <item>Black</item>
    <item>Brown</item>
    <item>Red</item>
    <item>Orange</item>
    <item>Yellow</item>
    <item>Green</item>
    <item>Blue</item>
    <item>Violet</item>
    <item>Gray</item>
    <item>White</item>    
  </string-array>

OnCreate 方法中的适配器代码:

    var bandOne = FindViewById<Spinner>(Resource.Id.bandOneColor);
    var bandOneAdapter = ArrayAdapter.CreateFromResource(this, Resource.Array.FourBandResistorFullColor,
                                                         Android.Resource.Layout.SimpleSpinnerItem);
    bandOneAdapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
    bandOne.Adapter = bandOneAdapter;
    bandOne.ItemSelected += BandOne_ItemSelected;

【问题讨论】:

  • Spinner 使用什么适配器?
  • 我用一些代码更新了问题!

标签: android android-layout xamarin.android


【解决方案1】:

您需要使用自定义适配器。我猜你正在使用 ArrayAdapter?如果是这样,您可以这样做:

    private class MyArrayAdapter extends ArrayAdapter<String>{

        public MyArrayAdapter(Context context, int textViewResourceId) {
            super(context, textViewResourceId); 
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = super.getView(position, convertView, parent);
            int color = getColorFromName(getItem(position));
            view.setBackgroundColor(color);
            return view;
        }   
    }

请注意,getColorFromName 是您需要自己实现的函数。它从 String 映射到 int 颜色值 (ARGB)。例如红色为 0xffff0000。

【讨论】:

  • 谢谢,但我要说的是,为了便于使用,微调器中的项目应该具有与项目名称相对应的背景颜色。
  • 这正是代码的作用。微调器的子视图在 getView() 中创建。通过调用 setBackgroundColor,您可以实现您想要的。唯一的(次要)问题是 setBackgroundColors 需要一个 int。 (4 个字节。1>Alpha 2>Red 3>Green 4>Blue)。因此,您需要编写一个映射函数来将名称转换为这些整数。
  • 好吧,对不起,我在 Java 方面很糟糕......不知道这会做什么:P 然后我会尝试将它移植到 C#。
  • 我没有意识到您需要 c# 中的代码。但是通过查看question,我知道在 c# 中创建自定义数组适配器应该不难。
猜你喜欢
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多