我正在使用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);
改变背景颜色。我想我可以构建自己的对话框等等,但我真的不想花很多时间在这上面,因为它可能是一次性代码。
谢谢!
答案 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;
}
}