Android 无需findViewById()以编程方式更改可绘制xml文件的颜色

Android 无需findViewById()以编程方式更改可绘制xml文件的颜色,android,colors,drawable,Android,Colors,Drawable,所以我想做的是 获取可绘制形状(xml文件) 获得可绘制的颜色 使用colors.xml中提供的颜色更改其颜色 在CardView上将可绘制设置为某个ImageView(这不是问题) 代码如下:- colors.xml <?xml version="1.0" encoding="utf-8"?> <resources> <color name="md_red_900">#B71C1C</color> <color name="

所以我想做的是

  • 获取可绘制形状(xml文件)
  • 获得可绘制的颜色
  • 使用colors.xml中提供的颜色更改其颜色
  • 在CardView上将可绘制设置为某个ImageView(这不是问题)
  • 代码如下:-

    colors.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="md_red_900">#B71C1C</color>
        <color name="md_pink_900">#880E4F</color>
        <color name="md_purple_900">#4A148C</color>
        <color name="md_deep_purple_900">#311B92</color>
        ...
        <!--15 more colors-->
    </resources>
    
    
    #B71C1C
    #880E4F
    #4A148C
    #311B92
    ...
    
    shape_template.xml(可绘制形状):-

    
    
    MainColorPaletteAdapter.java(我想在其中更改drawable的颜色):-

    package com.danish.foveros.adapter;
    导入android.graphics.drawable.drawable;
    导入android.media.Image;
    导入android.support.v7.widget.RecyclerView;
    导入android.view.LayoutInflater;
    导入android.view.view;
    导入android.view.ViewGroup;
    导入android.widget.ImageView;
    导入android.widget.TextView;
    import com.danish.foveros.R;
    导入java.util.ArrayList;
    导入java.util.List;
    公共类MainColorPaletteAdapter扩展了RecyclerView.Adapter{
    列出螨类;
    字符串[]颜色名称;
    int[]彩色缩略图;
    int[]所有材料颜色900;
    int[]colorname背景色;
    公共主颜色调色板适配器(){
    超级();
    mItems=新的ArrayList();
    主颜色调色板设置颜色;
    colorName=新字符串[]{“琥珀色”、“棕色”、“青色”、“青色”};
    colorThumbnail=newint[]{R.drawable.amber,R.drawable.brown,
    R.drawable.cyan,R.drawable.teal};
    colorNameBackgroundColor=newint[]{R.color.md_琥珀色_900,R.color.md_棕色_900,
    R.color.md_青色_900,R.color.md_青色_900};
    for(int i=0;i
    我尝试过很多方法,但他们说通过findViewById()获得视图的可绘制或背景色,但这对我不起作用

    正如您所看到的,可拉伸形状是一个非常简单的形状,所以它可能不难做到这一点

    我原以为创建19个可绘制的xml文件,我可以得到一个可绘制的更改,它的颜色用于第一个cardview更改它的颜色并用于第二个cardview,依此类推

    如果需要,请询问更多信息


    感谢您的帮助。谢谢。

    我自己解决了:-

    package com.danish.foveros.adapter;
    import android.content.Context;
    import android.graphics.drawable.Drawable;
    import android.media.Image;
    import android.support.v7.widget.CardView;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.danish.foveros.R;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainColorPaletteAdapter extends RecyclerView.Adapter<MainColorPaletteAdapter.ViewHolder> {
        List<MainColorPaletteGetSet> mItems;
        String[] colorName;
        int[] colorThumbnail;
        int[] allMaterialColor900;
        int[] colorNameBackgroundColor;
    
        public MainColorPaletteAdapter() {
            super();
            mItems = new ArrayList<MainColorPaletteGetSet>();
            MainColorPaletteGetSet color;
            colorNameBackgroundColor = new int[]{
                    R.color.md_red_900,
                    R.color.md_pink_900,
                    R.color.md_purple_900,
                    R.color.md_deep_purple_900,
                    R.color.md_indigo_900,
                    R.color.md_blue_900,
                    R.color.md_light_blue_900,
                    R.color.md_cyan_900,
                    R.color.md_teal_900,
                    R.color.md_green_900,
                    R.color.md_light_green_900,
                    R.color.md_lime_900,
                    R.color.md_yellow_900,
                    R.color.md_amber_900,
                    R.color.md_orange_900,
                    R.color.md_deep_orange_900,
                    R.color.md_brown_900,
                    R.color.md_grey_900,
                    R.color.md_blue_grey_900
            };
    
            colorName = new String[]{
                    "Red",
                    "Pink",
                    "Purple",
                    "Deep Purple",
                    "Indigo",
                    "Blue",
                    "Light Blue",
                    "Cyan",
                    "Teal",
                    "Green",
                    "Light Green",
                    "Lime",
                    "Yellow",
                    "Amber",
                    "Orange",
                    "Deep Orange",
                    "Brown",
                    "Grey",
                    "Blue Grey"
            };
            colorThumbnail = new int[]{
                    R.color.md_red_500,
                    R.color.md_pink_500,
                    R.color.md_purple_500,
                    R.color.md_deep_purple_500,
                    R.color.md_indigo_500,
                    R.color.md_blue_500,
                    R.color.md_light_blue_500,
                    R.color.md_cyan_500,
                    R.color.md_teal_500,
                    R.color.md_green_500,
                    R.color.md_light_green_500,
                    R.color.md_lime_500,
                    R.color.md_yellow_500,
                    R.color.md_amber_500,
                    R.color.md_orange_500,
                    R.color.md_deep_orange_500,
                    R.color.md_brown_500,
                    R.color.md_grey_500,
                    R.color.md_blue_grey_500
            };
    
    
            for (int i = 0; i < colorName.length; i++) {
                color = new MainColorPaletteGetSet();
                color.setColorName(colorName[i]);
                color.setColorThumbnail(colorThumbnail[i]);
                color.setColorNameBackgroundColor(colorNameBackgroundColor[i]);
                mItems.add(color);
            }
    
    
        }
    
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
            View v = LayoutInflater
                    .from(viewGroup.getContext())
                    .inflate(R.layout.fragment_home_data, viewGroup, false);
            ViewHolder viewHolder = new ViewHolder(v);
            return viewHolder;
        }
    
        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {
            MainColorPaletteGetSet color = mItems.get(position);
            holder.colorThumbnailView.setBackgroundResource(color.getColorThumbnail());
            holder.colorNameView.setText(color.getColorName());
            holder.colorNameView.setBackgroundResource(color.getColorNameBackgroundColor());
        }
    
        @Override
        public int getItemCount() {
            return mItems.size();
        }
    
    
        public class ViewHolder extends RecyclerView.ViewHolder {
    
            public ImageView colorThumbnailView;
            public TextView colorNameView;
    
    
    
            public ViewHolder(final View itemView) {
                super(itemView);
                colorThumbnailView = (ImageView) itemView.findViewById(R.id.colorThumbnail);
                colorNameView = (TextView) itemView.findViewById(R.id.colorName);
            }
    
        }
    }
    
    package com.danish.foveros.adapter;
    导入android.content.Context;
    导入android.graphics.drawable.drawable;
    导入android.media.Image;
    导入android.support.v7.widget.CardView;
    导入android.support.v7.widget.RecyclerView;
    导入android.view.LayoutInflater;
    导入android.view.view;
    导入android.view.ViewGroup;
    导入android.widget.ImageView;
    导入android.widget.TextView;
    导入android.widget.Toast;
    import com.danish.foveros.R;
    导入java.util.ArrayList;
    导入java.util.List;
    公共类MainColorPaletteAdapter扩展了RecyclerView.Adapter{
    列出螨类;
    字符串[]颜色名称;
    int[]彩色缩略图;
    int[]所有材料颜色900;
    int[]colorname背景色;
    公共主颜色调色板适配器(){
    超级();
    mItems=新的ArrayList();
    主颜色调色板设置颜色;
    colorNameBackgroundColor=new int[]{
    R.color.md_red_900,
    R.color.md_pink_900,
    R.color.md_紫色_900,
    R.color.md_深紫色_900,
    R.color.md_靛蓝_900,
    R.color.md_蓝色_900,
    R.color.md_浅蓝色_900,
    R.color.md_青色_900,
    R.color.md_teal_900,
    R.color.md_绿色_900,
    R.color.md_浅绿色_900,
    R.color.md_lime_900,
    R.color.md_黄色_900,
    R.color.md_琥珀色_900,
    R.color.md_橙色_900,
    R.color.md_深橙色_900,
    R.color.md_brown_900,
    R.color.md_灰_900,
    R.color.md_蓝色_灰色_900
    };
    colorName=新字符串[]{
    “红色”,
    “粉红”,
    “紫色”,
    “深紫色”,
    “靛蓝”,
    “蓝色”,
    “浅蓝色”,
    “青色”,
    “水鸭”,
    “绿色”,
    “浅绿色”,
    “石灰”,
    “黄色”,
    “琥珀”,
    “橙色”,
    “深橙色”,
    “棕色”,
    “灰色”,
    “蓝灰色”
    };
    colorThumbnail=newint[]{
    R.color.md_red_500,
    
    package com.danish.foveros.adapter;
    
    import android.graphics.drawable.Drawable;
    import android.media.Image;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.TextView;
    import com.danish.foveros.R;  
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainColorPaletteAdapter extends RecyclerView.Adapter<MainColorPaletteAdapter.ViewHolder> {
        List<MainColorPaletteGetSet> mItems;
        String[] colorName;
        int[] colorThumbnail;
        int[] allMaterialColor900;
        int[] colorNameBackgroundColor;
    
        public MainColorPaletteAdapter() {
            super();
            mItems = new ArrayList<MainColorPaletteGetSet>();
            MainColorPaletteGetSet color;
    
            colorName = new String[]{"Amber", "Brown", "Cyan", "Teal"};
            colorThumbnail = new int[]{R.drawable.amber, R.drawable.brown,
                    R.drawable.cyan, R.drawable.teal};
            colorNameBackgroundColor = new int[]{R.color.md_amber_900, R.color.md_brown_900,
                    R.color.md_cyan_900, R.color.md_teal_900};
    
            for (int i = 0; i < colorName.length; i++) {
                color = new MainColorPaletteGetSet();
                color.setColorName(colorName[i]);
                color.setColorThumbnail(colorThumbnail[i]);
                color.setColorNameBackgroundColor(colorNameBackgroundColor[i]);
                mItems.add(color);
            }    
        }
    
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
            View v = LayoutInflater
                    .from(viewGroup.getContext())
                    .inflate(R.layout.fragment_home_data, viewGroup, false);
            ViewHolder viewHolder = new ViewHolder(v);
            return viewHolder;
        }
    
        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {
            MainColorPaletteGetSet color = mItems.get(position);
            holder.colorThumbnail.setImageResource(color.getColorThumbnail());
            holder.colorName.setText(color.getColorName());
            holder.colorName.setBackgroundColor(color.getColorNameBackgroundColor());
    
        }
    
        @Override
        public int getItemCount() {
            return mItems.size();
        }
    
        public class ViewHolder extends RecyclerView.ViewHolder {
    
            public ImageView colorThumbnail;
            public TextView colorName;
    
            public ViewHolder(View itemView) {
                super(itemView);
                colorThumbnail = (ImageView) itemView.findViewById(R.id.colorThumbnail);
                colorName = (TextView) itemView.findViewById(R.id.colorName);
    
            }
        }
    }
    
    package com.danish.foveros.adapter;
    import android.content.Context;
    import android.graphics.drawable.Drawable;
    import android.media.Image;
    import android.support.v7.widget.CardView;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.danish.foveros.R;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainColorPaletteAdapter extends RecyclerView.Adapter<MainColorPaletteAdapter.ViewHolder> {
        List<MainColorPaletteGetSet> mItems;
        String[] colorName;
        int[] colorThumbnail;
        int[] allMaterialColor900;
        int[] colorNameBackgroundColor;
    
        public MainColorPaletteAdapter() {
            super();
            mItems = new ArrayList<MainColorPaletteGetSet>();
            MainColorPaletteGetSet color;
            colorNameBackgroundColor = new int[]{
                    R.color.md_red_900,
                    R.color.md_pink_900,
                    R.color.md_purple_900,
                    R.color.md_deep_purple_900,
                    R.color.md_indigo_900,
                    R.color.md_blue_900,
                    R.color.md_light_blue_900,
                    R.color.md_cyan_900,
                    R.color.md_teal_900,
                    R.color.md_green_900,
                    R.color.md_light_green_900,
                    R.color.md_lime_900,
                    R.color.md_yellow_900,
                    R.color.md_amber_900,
                    R.color.md_orange_900,
                    R.color.md_deep_orange_900,
                    R.color.md_brown_900,
                    R.color.md_grey_900,
                    R.color.md_blue_grey_900
            };
    
            colorName = new String[]{
                    "Red",
                    "Pink",
                    "Purple",
                    "Deep Purple",
                    "Indigo",
                    "Blue",
                    "Light Blue",
                    "Cyan",
                    "Teal",
                    "Green",
                    "Light Green",
                    "Lime",
                    "Yellow",
                    "Amber",
                    "Orange",
                    "Deep Orange",
                    "Brown",
                    "Grey",
                    "Blue Grey"
            };
            colorThumbnail = new int[]{
                    R.color.md_red_500,
                    R.color.md_pink_500,
                    R.color.md_purple_500,
                    R.color.md_deep_purple_500,
                    R.color.md_indigo_500,
                    R.color.md_blue_500,
                    R.color.md_light_blue_500,
                    R.color.md_cyan_500,
                    R.color.md_teal_500,
                    R.color.md_green_500,
                    R.color.md_light_green_500,
                    R.color.md_lime_500,
                    R.color.md_yellow_500,
                    R.color.md_amber_500,
                    R.color.md_orange_500,
                    R.color.md_deep_orange_500,
                    R.color.md_brown_500,
                    R.color.md_grey_500,
                    R.color.md_blue_grey_500
            };
    
    
            for (int i = 0; i < colorName.length; i++) {
                color = new MainColorPaletteGetSet();
                color.setColorName(colorName[i]);
                color.setColorThumbnail(colorThumbnail[i]);
                color.setColorNameBackgroundColor(colorNameBackgroundColor[i]);
                mItems.add(color);
            }
    
    
        }
    
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
            View v = LayoutInflater
                    .from(viewGroup.getContext())
                    .inflate(R.layout.fragment_home_data, viewGroup, false);
            ViewHolder viewHolder = new ViewHolder(v);
            return viewHolder;
        }
    
        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {
            MainColorPaletteGetSet color = mItems.get(position);
            holder.colorThumbnailView.setBackgroundResource(color.getColorThumbnail());
            holder.colorNameView.setText(color.getColorName());
            holder.colorNameView.setBackgroundResource(color.getColorNameBackgroundColor());
        }
    
        @Override
        public int getItemCount() {
            return mItems.size();
        }
    
    
        public class ViewHolder extends RecyclerView.ViewHolder {
    
            public ImageView colorThumbnailView;
            public TextView colorNameView;
    
    
    
            public ViewHolder(final View itemView) {
                super(itemView);
                colorThumbnailView = (ImageView) itemView.findViewById(R.id.colorThumbnail);
                colorNameView = (TextView) itemView.findViewById(R.id.colorName);
            }
    
        }
    }