Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.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
Android:更改下拉列表中微调器项的文本颜色_Android_Drop Down Menu_Colors_Textview_Spinner - Fatal编程技术网

Android:更改下拉列表中微调器项的文本颜色

Android:更改下拉列表中微调器项的文本颜色,android,drop-down-menu,colors,textview,spinner,Android,Drop Down Menu,Colors,Textview,Spinner,如何更改下拉列表中微调器项的文本颜色 当我这样做时(在选择的方法中): 或 或 或 它会更改微调器选定项的颜色,但不会在下拉列表中更改 这样做: ((TextView) spinner.getAdapter().getDropDownView(position, null, parent)).setTextColor(getResources().getColor(R.color.accent)); 不起作用。您可以通过设置适配器来实现此目标。您应该创建一个以简单方式显示项目的自定义适配器 。

如何更改下拉列表中微调器项的文本颜色

当我这样做时(在选择的方法中):

它会更改微调器选定项的颜色,但不会在下拉列表中更改

这样做:

((TextView) spinner.getAdapter().getDropDownView(position, null, parent)).setTextColor(getResources().getColor(R.color.accent));

不起作用。

您可以通过设置适配器来实现此目标。您应该创建一个以简单方式显示项目的自定义适配器

。对于任何方法或变量,您都可以参考此

所以你要做的是:

  • 创建自定义适配器
  • 为适配器创建布局和java代码(您可以在google上轻松找到数千个示例)
  • 从中添加代码(您需要根据自己的需要进行自定义)
适配器

 class HighLightArrayAdapter extends ArrayAdapter<CharSequence> {
    private int mSelectedIndex = -1;

    public void setSelection(int position) {
        mSelectedIndex =  position;
        notifyDataSetChanged();
    }

    public HighLightArrayAdapter(Context context, int resource, CharSequence[] objects) {
        super(context, resource, objects);
    }


    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        View itemView =  super.getDropDownView(position, convertView, parent);

        if (position == mSelectedIndex) {
            itemView.setBackgroundColor(Color.rgb(56,184,226));
        } else {
            itemView.setBackgroundColor(Color.TRANSPARENT);
        }

        return itemView;
    }
} 
class HighLightArrayAdapter扩展了ArrayAdapter{
私有int mSelectedIndex=-1;
公共选举(内部职位){
mSelectedIndex=位置;
notifyDataSetChanged();
}
公共HighLightArrayAdapter(上下文上下文、int资源、CharSequence[]对象){
超级(上下文、资源、对象);
}
@凌驾
公共视图getDropDownView(int位置、视图转换视图、视图组父视图){
View itemView=super.getDropDownView(位置、转换视图、父级);
如果(位置==mSelectedIndex){
setBackgroundColor(Color.rgb(56184226));
}否则{
setBackgroundColor(Color.TRANSPARENT);
}
返回项目视图;
}
} 
PS:

由于
setSelection
方法不是本机方法,因此需要从活动中的
OnItemSelectedListener
调用它


希望这对您有所帮助。

您可以通过设置适配器来实现此目标。您应该创建一个自定义适配器,以简单的方式显示您的项目

。对于任何方法或变量,您都可以参考此

所以你要做的是:

  • 创建自定义适配器
  • 为适配器创建布局和java代码(您可以在google上轻松找到数千个示例)
  • 从中添加代码(您需要根据自己的需要进行自定义)
适配器

 class HighLightArrayAdapter extends ArrayAdapter<CharSequence> {
    private int mSelectedIndex = -1;

    public void setSelection(int position) {
        mSelectedIndex =  position;
        notifyDataSetChanged();
    }

    public HighLightArrayAdapter(Context context, int resource, CharSequence[] objects) {
        super(context, resource, objects);
    }


    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        View itemView =  super.getDropDownView(position, convertView, parent);

        if (position == mSelectedIndex) {
            itemView.setBackgroundColor(Color.rgb(56,184,226));
        } else {
            itemView.setBackgroundColor(Color.TRANSPARENT);
        }

        return itemView;
    }
} 
class HighLightArrayAdapter扩展了ArrayAdapter{
私有int mSelectedIndex=-1;
公共选举(内部职位){
mSelectedIndex=位置;
notifyDataSetChanged();
}
公共HighLightArrayAdapter(上下文上下文、int资源、CharSequence[]对象){
超级(上下文、资源、对象);
}
@凌驾
公共视图getDropDownView(int位置、视图转换视图、视图组父视图){
View itemView=super.getDropDownView(位置、转换视图、父级);
如果(位置==mSelectedIndex){
setBackgroundColor(Color.rgb(56184226));
}否则{
setBackgroundColor(Color.TRANSPARENT);
}
返回项目视图;
}
} 
PS:

由于
setSelection
方法不是本机方法,因此需要从活动中的
OnItemSelectedListener
调用它


希望这能有所帮助。

我认为在android中有两种方法可以实现这一点

  • @重写ArrayAdapter方法
  • 创建自定义微调器适配器
  • 让我举例说明每种方法:

  • @重写ArrayAdapter方法
  • 尝试覆盖getDropDownView(int位置、视图转换视图、视图组父级)
    以根据您的要求自定义或设置TextView属性

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
          TextView textView = (TextView) super.getDropDownView(position, convertView, parent);
          textView.setTextColor(Color.BLUE);
          return  textView;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
           TextView textView = (TextView) super.getView(position, convertView, parent);
           textView.setTextColor(Color.RED);
           return  textView;
    }
    
    尝试覆盖getView(int-position、View-convertView、ViewGroup-parent)
    以根据需要自定义或设置TextView属性

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
          TextView textView = (TextView) super.getDropDownView(position, convertView, parent);
          textView.setTextColor(Color.BLUE);
          return  textView;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
           TextView textView = (TextView) super.getView(position, convertView, parent);
           textView.setTextColor(Color.RED);
           return  textView;
    }
    
    使用@Override ArrayAdapter方法的爬虫示例

    spinnerList = new ArrayList<>();
    spinnerList.add("Spinner item 1");
    spinnerList.add("Spinner item 2");
    spinnerList.add("Spinner item 3");
    spinnerList.add("Spinner item 4");
    spinnerList.add("Spinner item 5");
    ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,spinnerList){
            @Override
            public View getDropDownView(int position, View convertView, ViewGroup parent) {
                TextView textView = (TextView) super.getDropDownView(position, convertView, parent);
                textView.setTextColor(Color.BLUE);
                return  textView;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                TextView textView = (TextView) super.getView(position, convertView, parent);
                textView.setTextColor(Color.RED);
                return  textView;
            }
        };
    mSpinner.setAdapter(spinnerAdapter);
    

    我认为有两种方法可以在android中实现这一点

  • @重写ArrayAdapter方法
  • 创建自定义微调器适配器
  • 让我举例说明每种方法:

  • @重写ArrayAdapter方法
  • 尝试覆盖getDropDownView(int位置、视图转换视图、视图组父级)以根据您的要求自定义或设置TextView属性

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
          TextView textView = (TextView) super.getDropDownView(position, convertView, parent);
          textView.setTextColor(Color.BLUE);
          return  textView;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
           TextView textView = (TextView) super.getView(position, convertView, parent);
           textView.setTextColor(Color.RED);
           return  textView;
    }
    
    尝试覆盖getView(int-position、View-convertView、ViewGroup-parent)以根据需要自定义或设置TextView属性

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
          TextView textView = (TextView) super.getDropDownView(position, convertView, parent);
          textView.setTextColor(Color.BLUE);
          return  textView;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
           TextView textView = (TextView) super.getView(position, convertView, parent);
           textView.setTextColor(Color.RED);
           return  textView;
    }
    
    使用@Override ArrayAdapter方法的爬虫示例

    spinnerList = new ArrayList<>();
    spinnerList.add("Spinner item 1");
    spinnerList.add("Spinner item 2");
    spinnerList.add("Spinner item 3");
    spinnerList.add("Spinner item 4");
    spinnerList.add("Spinner item 5");
    ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,spinnerList){
            @Override
            public View getDropDownView(int position, View convertView, ViewGroup parent) {
                TextView textView = (TextView) super.getDropDownView(position, convertView, parent);
                textView.setTextColor(Color.BLUE);
                return  textView;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                TextView textView = (TextView) super.getView(position, convertView, parent);
                textView.setTextColor(Color.RED);
                return  textView;
            }
        };
    mSpinner.setAdapter(spinnerAdapter);
    

    作为最简单解决方案的粉丝,我希望在不使用自定义适配器的情况下动态更改颜色。但无论如何,谢谢你。@丹尼斯是的,我可以理解,但不幸的是,与基本布局不同的所有内容都可以实现,但需要一些代码。顺便说一句,创建适配器非常简单。几次以前我也认为这很烦人,我一直在尽力避免,但当我看到适配器的功能时,我改变了主意。相信我,它非常简单,功能强大。我习惯使用适配器,但和大多数开发人员一样,我非常懒。顺便说一句,这次你真的帮我找到了所需的动机。谢谢:)作为最简单解决方案的粉丝,我希望在不使用自定义适配器的情况下动态更改颜色。但无论如何,谢谢你。@丹尼斯是的,我可以理解,但不幸的是,与基本布局不同的所有内容都可以实现,但需要一些代码。顺便说一句,创建适配器非常简单。几次以前我也认为当我看到适配器的电源时,我改变了主意。相信我,这真的很简单,而且功能强大。我习惯于使用适配器,但和大多数开发人员一样