在AlertDialog中使用适配器时Android更改背景颜色

时间:2016-10-17 17:30:27

标签: android alertdialog

我正在使用AlertDialog来显示一些调试信息。我只是有一个列表,我将信息放入。为了使其更具可读性,我想根据类型更改列表中各个项目的背景颜色。不幸的是,我似乎无法获得我想要的颜色。这是我正在使用的适配器的视图:

    @Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = super.getView(position, convertView, parent);
    TextView tv = (TextView) v.findViewById(android.R.id.text1);
    RuleDebugItem item = mData.get(position);

    tv.setSingleLine(false);
    if(item.type.equalsIgnoreCase(Field.VARIABLE)) {
        tv.setText(item.ruleDebugText);
        tv.setTextSize(18);
        v.setBackgroundColor(color.bluelight);
        tv.setTypeface(null, Typeface.BOLD);
        tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.white));
    }
    else if (item.type.equalsIgnoreCase(Field.FUNCTION)) {
        tv.setText(item.ruleDebugText);
        tv.setTextSize(16);
        v.setBackgroundColor(color.greenlight);
        tv.setTypeface(null, Typeface.BOLD);
        tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.white));
    }
    else if (item.type.equals("Condition")) {
        tv.setText("   " + item.ruleDebugText);
        tv.setTextSize(14);
        tv.setTypeface(null, Typeface.NORMAL);
        tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.black));
    }
    return v;
}

我期待v.setBackgroundColor(color.greenlight);改变背景颜色。我想我可以构建自己的对话框等等,但我真的不想花很多时间在这上面,因为它可能是一次性代码。

谢谢!

1 个答案:

答案 0 :(得分:0)

所以答案并不是我所期待的。事实证明,AlertDialog不接受标准颜色,而是需要从Android样式中获取它们。不确定这是否是由于某人在我们这边设置样式(可能因为我没有编写基本代码)或者这是AlertDialog的本质。因此,如果其他人遇到这个,这里是最终的代码(请注意这只是一次性调试代码,它没有优化):

public class RuleDebugItemAdapter extends ArrayAdapter<RuleDebugItem> {
Context mContext; 
int mLayoutResourceId;    
ArrayList<RuleDebugItem> mData;

public RuleDebugItemAdapter(Context context, int resource, ArrayList<RuleDebugItem> data) {
    super(context, resource, data);
    mContext = context;
    mLayoutResourceId = resource;
    mData = data;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = super.getView(position, convertView, parent);
    TextView tv = (TextView) v.findViewById(android.R.id.text1);
    RuleDebugItem item = mData.get(position);

    tv.setSingleLine(false);
    if (item.type.equalsIgnoreCase(Field.VARIABLE)) {
        tv.setText(item.ruleDebugText);
        tv.setTextSize(18);
        tv.setTypeface(null, Typeface.BOLD);
        v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.white));
        tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.black));
    }
    else if (item.type.equalsIgnoreCase(Field.FORMRULE)) { 
        tv.setText(item.ruleDebugText);
        tv.setTextSize(18);
        tv.setTypeface(null, Typeface.BOLD);
        v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.white));
        tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.black));
    }
    else if (item.type.equalsIgnoreCase(Field.FUNCTION)) {

        tv.setTextSize(16);
        if (item.success) {
            v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.holo_green_light));
            tv.setText(Field.SPACE + item.ruleDebugText);
        }
        else {
            v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.holo_blue_bright));
            tv.setText("Init " + item.ruleDebugText);
        }

        tv.setTypeface(null, Typeface.BOLD);
        tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.white));
    }
    else if (item.type.equalsIgnoreCase(Field.ACTION)) {

        tv.setTextSize(16);
        if (item.success) {
            v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.holo_green_light));
            tv.setText(Field.SPACE + item.ruleDebugText);
        }
        else {
            v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.holo_blue_bright));
            tv.setText("Pre-" + item.ruleDebugText);
        }

        tv.setTypeface(null, Typeface.BOLD);
        tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.white));
    }
    else if (item.type.equals(Field.CONDITION)) {
        tv.setText(item.ruleDebugText);
        tv.setTextSize(16);
        tv.setTypeface(null, Typeface.NORMAL);
        if (item.success)
            v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.holo_green_light));
        else 
            v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.holo_red_light));
        tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.white));
    }
    return v;
} 
}