Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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 微调器项目的单独背面颜色_Java_Android_Spinner_Android Spinner - Fatal编程技术网

Java 微调器项目的单独背面颜色

Java 微调器项目的单独背面颜色,java,android,spinner,android-spinner,Java,Android,Spinner,Android Spinner,我想给每件物品的背面着色。 使用以下代码设置项目: Spinner spinner = (Spinner) findViewById(R.id.spinner); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.duesentypen, android.R.layout.simple_spinner_item); adapter.setDrop

我想给每件物品的背面着色。 使用以下代码设置项目:

Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
            R.array.duesentypen, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

我怎样才能以最好的方式做到这一点呢?

试着根据位置改变颜色

final List<String> plantsList = new ArrayList<>(Arrays.asList(plants));

        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
            R.array.duesentypen, android.R.layout.simple_spinner_item){
            @Override
            public View getDropDownView(int position, View convertView,
                                        ViewGroup parent) {
                View view = super.getDropDownView(position, convertView, parent);
                TextView tv = (TextView) view;

        switch(position) {
             case 0:
                tv.setTextColor(Color.parseColor("#FF7C7967"));
             case 1:
                tv.setTextColor(Color.parseColor("#FF7C7967"));
                   }

                return view;
            }
        };

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
final List plantsList=new ArrayList(Arrays.asList(plants));
ArrayAdapter=ArrayAdapter.createFromResource(此,
R.array.duesentypen,android.R.layout.simple\u微调器\u项){
@凌驾
公共视图getDropDownView(int位置,视图转换视图,
视图组(父级){
视图=super.getDropDownView(位置、转换视图、父级);
TextView电视=(TextView)视图;
开关(位置){
案例0:
tv.setTextColor(Color.parseColor(#FF7C7967”);
案例1:
tv.setTextColor(Color.parseColor(#FF7C7967”);
}
返回视图;
}
};
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
旋转器。设置适配器(适配器);

尝试根据位置改变颜色

final List<String> plantsList = new ArrayList<>(Arrays.asList(plants));

        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
            R.array.duesentypen, android.R.layout.simple_spinner_item){
            @Override
            public View getDropDownView(int position, View convertView,
                                        ViewGroup parent) {
                View view = super.getDropDownView(position, convertView, parent);
                TextView tv = (TextView) view;

        switch(position) {
             case 0:
                tv.setTextColor(Color.parseColor("#FF7C7967"));
             case 1:
                tv.setTextColor(Color.parseColor("#FF7C7967"));
                   }

                return view;
            }
        };

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
final List plantsList=new ArrayList(Arrays.asList(plants));
ArrayAdapter=ArrayAdapter.createFromResource(此,
R.array.duesentypen,android.R.layout.simple\u微调器\u项){
@凌驾
公共视图getDropDownView(int位置,视图转换视图,
视图组(父级){
视图=super.getDropDownView(位置、转换视图、父级);
TextView电视=(TextView)视图;
开关(位置){
案例0:
tv.setTextColor(Color.parseColor(#FF7C7967”);
案例1:
tv.setTextColor(Color.parseColor(#FF7C7967”);
}
返回视图;
}
};
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
旋转器。设置适配器(适配器);

您需要创建一个自定义的
微调器
适配器并覆盖
getView()
以设置每个项目的颜色和文本

在这里,我使用模运算符(%)将颜色环绕在颜色数组周围,以避免项目大于可用颜色时出现
indexoutofboundsexeption

自定义适配器

public class ColorAdapter extends BaseAdapter {

    private ArrayList<Integer> mColors;
    private String[] mItems;

    ColorAdapter2(String[] items) {
        mItems = items;
        String[] hex = {"#886da8", "#ffc3cf", "#ef9b00", "#2bb430", "#f7dc01", "#bc65a2", "#487ebf", "#e00124", "#b36634", "#949494", "#ffffff", "#000000", "#4bbbd0", "#8b6d9f", "#8ccff4"};

        mColors = new ArrayList<>();
        for (String color : hex) {
            mColors.add(Color.parseColor(color));
        }

    }

    @Override
    public int getCount() {
        return mItems.length;
    }

    @Override
    public Object getItem(int args) {
        return mColors.get(args);
    }

    @Override
    public long getItemId(int args) {
        return args;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;

        if (convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            convertView = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, null);
            holder = new ViewHolder();
            holder.textView = convertView.findViewById(android.R.id.text1);
            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.textView.setBackgroundColor(mColors.get(position % mColors.size()));
        holder.textView.setText( mItems[position]);
        return convertView;
    }

    /* Return spinner text of the item at particular position*/
    public String getItemAtPosition(int position) {
        if (position > -1 && position < mItems.length)
            return mItems[position];
        else
            return null;
    }

    static class ViewHolder {
        TextView textView;
    }

}
strings.xml

<resources>
    <string name="app_name">Color Activity</string>
    <string-array name="myItems">
        <item>item1</item>
        <item>item2</item>
        <item>item3</item>
        <item>item4</item>
        <item>item5</item>
    </string-array>
</resources>
无论何时选择一个项目,您都可以获得它:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        Log.d(TAG, "onItemSelected: " + 
              ((ColorAdapter)spinner.getAdapter()).getItemAtPosition(position));

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

    }
});
spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
Log.d(标记“已选择:”+
((ColorAdapter)spinner.getAdapter()).getItemAtPosition(position));
@凌驾
未选择公共无效(AdapterView父级){
}
});

您需要创建一个自定义的
微调器
适配器并覆盖
getView()
以设置每个项目的颜色和文本

在这里,我使用模运算符(%)将颜色环绕在颜色数组周围,以避免项目大于可用颜色时出现
indexoutofboundsexeption

自定义适配器

public class ColorAdapter extends BaseAdapter {

    private ArrayList<Integer> mColors;
    private String[] mItems;

    ColorAdapter2(String[] items) {
        mItems = items;
        String[] hex = {"#886da8", "#ffc3cf", "#ef9b00", "#2bb430", "#f7dc01", "#bc65a2", "#487ebf", "#e00124", "#b36634", "#949494", "#ffffff", "#000000", "#4bbbd0", "#8b6d9f", "#8ccff4"};

        mColors = new ArrayList<>();
        for (String color : hex) {
            mColors.add(Color.parseColor(color));
        }

    }

    @Override
    public int getCount() {
        return mItems.length;
    }

    @Override
    public Object getItem(int args) {
        return mColors.get(args);
    }

    @Override
    public long getItemId(int args) {
        return args;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;

        if (convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            convertView = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, null);
            holder = new ViewHolder();
            holder.textView = convertView.findViewById(android.R.id.text1);
            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.textView.setBackgroundColor(mColors.get(position % mColors.size()));
        holder.textView.setText( mItems[position]);
        return convertView;
    }

    /* Return spinner text of the item at particular position*/
    public String getItemAtPosition(int position) {
        if (position > -1 && position < mItems.length)
            return mItems[position];
        else
            return null;
    }

    static class ViewHolder {
        TextView textView;
    }

}
strings.xml

<resources>
    <string name="app_name">Color Activity</string>
    <string-array name="myItems">
        <item>item1</item>
        <item>item2</item>
        <item>item3</item>
        <item>item4</item>
        <item>item5</item>
    </string-array>
</resources>
无论何时选择一个项目,您都可以获得它:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        Log.d(TAG, "onItemSelected: " + 
              ((ColorAdapter)spinner.getAdapter()).getItemAtPosition(position));

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

    }
});
spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
Log.d(标记“已选择:”+
((ColorAdapter)spinner.getAdapter()).getItemAtPosition(position));
@凌驾
未选择公共无效(AdapterView父级){
}
});

对不起,您想为每个项目或什么添加不同的颜色?是@Zain,因为每个微调器项目都指标准化颜色对不起,您想为每个项目或什么添加不同的颜色?是@Zain,因为每个微调器项目都指标准化颜色非常感谢这个详细的解决方案,效果很好。再问一个问题在Java学习过程中取得进展的方法:在
MainActivity
中使用
spinner
,我应该使
ColorAdapter
成为
MainActivity
的内部类还是MainActivity中自己的类?静态还是非静态?@LudwigM从技术角度看,这取决于您可以做哪一个;但是imagi请注意,您的项目中有多个活动,其中一些活动具有需要此适配器的微调器,因此您需要在每个活动中反复复制内部适配器类;因此,最好将其作为单独的类文件保存,并在每个活动中实例化。此外,为了方便起见,最好在o单独的类,因为每个类有不同的用途。好的,谢谢。如何获取所选项目的文本?
spinner.getItemAtPosition(spinner.getSelectedItemPosition()).toString()
不再工作了。返回的值是一个很大的数字。非常感谢这个详细的解决方案,它工作得很好。在我的Java学习过程中,还有一个问题需要解决:在
MainActivity
中使用了
spinner
,我是否应该将
ColorAdapter
作为
MainActivity的内部类e> 或者在MainActivity中有自己的类?静态还是非静态?@LudwigM从技术角度看,这取决于您可以执行其中任何一个;但是,假设您的项目中有多个活动,其中一些活动有需要此适配器的微调器,因此您需要在每个活动中反复复制内部适配器类;因此是b最好将它作为一个单独的类文件保存,并在每个活动中实例化它。此外,为了方便起见,最好将函数分成单独的类,因为每个类都有不同的用途。好的,谢谢。我如何获得sel的文本