Android 背景颜色显示不正确
Android background color not displaying correctly
第一次来这里,对 Android 还很陌生。我的 "events page".
中的背景颜色有问题
当显示新时间时,时间背景应该在深棕色和浅棕色之间交替,但由于某些原因,它有时有效而其他时间无效。
当应用程序显示不正确时,它要么在时间变化时保持相同的棕色阴影,要么在应该保持不变的时候改变棕色阴影。我不确定是什么原因造成的。
数据来自服务器上托管的 json 文件。数据在 AsyncTask class 中加载,应用程序将在用户到达事件页面之前等待数据下载。如果用户单击事件,将显示一条消息说 "Please wait for the data to be downloaded"。
这是其中一个条目的示例:
{
"title": "Some_Title",
"description": "Some_Description\n",
"times": [
{
"startTime": "2014-09-20 09:30:00",
"endTime": "2014-09-20 10:30:00"
},
{
"startTime": "2014-09-20 11:00:00",
"endTime": "2014-09-20 12:00:00"
},
{
"startTime": "2014-09-20 13:00:00",
"endTime": "2014-09-20 14:00:00"
}
],
"locationTitle": "Some_Location",
"locationLat": ##.######,
"locationLng": -###.######,
"typeX": 0,
"typeY": true,
"typeZ": false,
"typeA": false,
"typeB": false,
"typeC": false,
"SpreadsheetName": "Some_Name\n(A_Location)"
},
颜色在适配器中处理 class。这是处理背景颜色的代码和事件页面的屏幕截图以及日志:
public class EventScheduleAdapter extends BaseAdapter {
private final ArrayList<Event> events;
private final Context context;
private final ArrayList<Integer> holders;
public EventScheduleAdapter(Context context, boolean[] types, Calendar day) {
this.context = context;
this.events = EventList.getInstance().getFilteredEvents(day, types);
holders = new ArrayList<Integer>();
}
@Override
public int getCount() {
return events.size();
}
@Override
public Object getItem(int i) {
return events.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
Event event = events.get(position);
View vi = convertView;
ViewHolder holder;
//ImageView image = new ImageView(this.context);
//FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
//params.setMargins(20, 20, 20, 20);
if (convertView == null) {
vi = View.inflate(context, R.layout.event_list_item, null);
holder = new ViewHolder();
holder.time = (TextView) vi.findViewById(R.id.timeNumber);
holder.am = (TextView) vi.findViewById(R.id.timeAM);
holder.title = (TextView) vi.findViewById(R.id.title);
holder.location = (TextView) vi.findViewById(R.id.location);
//holder.description = (TextView) vi.findViewById(R.id.description);
holder.color = (LinearLayout) vi.findViewById(R.id.color);
holder.timeBackground = (RelativeLayout) vi.findViewById(R.id.time);
//holder.image = (ImageView) vi.findViewById(R.id.tag_A);
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
if(event.getStartTime() != null && (position == 0 || !EventList.isSameTime(event.getStartTime(), events.get(position - 1).getStartTime()))) {
holder.time.setText(String.format("%tl:%tM", event.getStartTime(), event.getStartTime()));
holder.am.setText(String.format("%Tp", event.getStartTime()));
} else {
holder.time.setText("");
holder.am.setText("");
}
Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/main.ttf");
holder.title.setText(event.getTitle());
holder.title.setTypeface(font);
holder.location.setText(event.getLocationTitle());
holder.location.setTypeface(font);
//holder.description.setText(event.getDescription());
//holder.description.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/description.ttf"));
holder.color.removeAllViews();
if(event.isTypeA()) {
holder.color.addView(newColorView(R.drawable.tag_A));
} if(event.isTypeB()) {
holder.color.addView(newColorView(R.drawable.tag_B));
} if(event.isTypeC()) {
holder.color.addView(newColorView(R.drawable.tag_C));
} if(event.isTypeD()) {
holder.color.addView(newColorView(R.drawable.tag_D));
} if(event.isTypeE()) {
holder.color.addView(newColorView(R.drawable.tag_E));
}
if (position != 0) {
Log.i("EventScheduleAdapter", "position " + position + "event @ position: " + event.getTitle());
if (!EventList.isSameTime(event.getStartTime(), events.get(position - 1).getStartTime())) {
Log.i("EventScheduleAdapter", "Same time is FALSE");
if(holders.get(position - 1) == R.color.background_event_dark) {
Log.i("EventScheduleAdapter", "Different Color LIGHT");
holder.timeColor = R.color.background_event_light;
holders.add(holder.timeColor);
Log.i("EventScheduleAdapter", "position Color" + holders.get(position));
} else {
Log.i("EventScheduleAdapter", "Different Color DARK");
holder.timeColor = R.color.background_event_dark;
holders.add(holder.timeColor);
Log.i("EventScheduleAdapter", "position Color" + holders.get(position));
}
} else {
Log.i("EventScheduleAdapter", "Same time is TRUE");
holder.timeColor = holders.get(position - 1);
// holder.
//holder.timeColor = holder.get(position-1)
if (holder.timeColor == R.color.background_event_dark)
Log.i("EventScheduleAdapter", "SAME COLOR IS DARK");
if (holder.timeColor == R.color.background_event_light)
Log.i("EventScheduleAdapter", "SAME COLOR IS LIGHT");
holders.add(holder.timeColor);
Log.i("EventScheduleAdapter", "position Color" + holders.get(position));
}
} else {
Log.i("EventScheduleAdapter", "Position is 0");
holder.timeColor = R.color.background_event_dark;
holders.add(holder.timeColor);
}
holder.timeBackground.setBackgroundColor(context.getResources().getColor(holder.timeColor));
return vi;
}
/* Circle newColorView(int color) {
Circle layout = new Circle(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(50, 50);
params.setMargins(5, 5, 5, 5);
layout.setLayoutParams(params);
layout.setColor(color);
return layout;
} */
ImageView newColorView(int drawable) {
ImageView layout = new ImageView(context); // put drawable in here
LinearLayout.LayoutParams params;
if (drawable == R.drawable.tag_cp) {
params = new LinearLayout.LayoutParams(78, 50);
}
else if (drawable == R.drawable.tag_slo) {
params = new LinearLayout.LayoutParams(100, 50);
}
else {
params = new LinearLayout.LayoutParams(50, 50);
}
params.setMargins(5, 5, 5, 5);
layout.setLayoutParams(params);
layout.setImageResource(drawable);
return layout;
}
class ViewHolder {
int timeColor;
RelativeLayout timeBackground;
TextView time;
TextView am;
TextView title;
TextView location;
//TextView description;
LinearLayout color;
}
}
我不能post图片因为我是新会员:(但我会尽快
您不断向 holders
数组中添加您创建的每个项目。所以如果你被要求绘制 item0 3 次和 item1 3 次,你最终在数组中有 6 个条目。考虑使用 sparse array
或 int[]
。
例如,当您被要求为位置 X 创建视图时,您可以:
holders[X] = myColorId;
第一次来这里,对 Android 还很陌生。我的 "events page".
中的背景颜色有问题当显示新时间时,时间背景应该在深棕色和浅棕色之间交替,但由于某些原因,它有时有效而其他时间无效。
当应用程序显示不正确时,它要么在时间变化时保持相同的棕色阴影,要么在应该保持不变的时候改变棕色阴影。我不确定是什么原因造成的。
数据来自服务器上托管的 json 文件。数据在 AsyncTask class 中加载,应用程序将在用户到达事件页面之前等待数据下载。如果用户单击事件,将显示一条消息说 "Please wait for the data to be downloaded"。
这是其中一个条目的示例:
{
"title": "Some_Title",
"description": "Some_Description\n",
"times": [
{
"startTime": "2014-09-20 09:30:00",
"endTime": "2014-09-20 10:30:00"
},
{
"startTime": "2014-09-20 11:00:00",
"endTime": "2014-09-20 12:00:00"
},
{
"startTime": "2014-09-20 13:00:00",
"endTime": "2014-09-20 14:00:00"
}
],
"locationTitle": "Some_Location",
"locationLat": ##.######,
"locationLng": -###.######,
"typeX": 0,
"typeY": true,
"typeZ": false,
"typeA": false,
"typeB": false,
"typeC": false,
"SpreadsheetName": "Some_Name\n(A_Location)"
},
颜色在适配器中处理 class。这是处理背景颜色的代码和事件页面的屏幕截图以及日志:
public class EventScheduleAdapter extends BaseAdapter {
private final ArrayList<Event> events;
private final Context context;
private final ArrayList<Integer> holders;
public EventScheduleAdapter(Context context, boolean[] types, Calendar day) {
this.context = context;
this.events = EventList.getInstance().getFilteredEvents(day, types);
holders = new ArrayList<Integer>();
}
@Override
public int getCount() {
return events.size();
}
@Override
public Object getItem(int i) {
return events.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
Event event = events.get(position);
View vi = convertView;
ViewHolder holder;
//ImageView image = new ImageView(this.context);
//FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
//params.setMargins(20, 20, 20, 20);
if (convertView == null) {
vi = View.inflate(context, R.layout.event_list_item, null);
holder = new ViewHolder();
holder.time = (TextView) vi.findViewById(R.id.timeNumber);
holder.am = (TextView) vi.findViewById(R.id.timeAM);
holder.title = (TextView) vi.findViewById(R.id.title);
holder.location = (TextView) vi.findViewById(R.id.location);
//holder.description = (TextView) vi.findViewById(R.id.description);
holder.color = (LinearLayout) vi.findViewById(R.id.color);
holder.timeBackground = (RelativeLayout) vi.findViewById(R.id.time);
//holder.image = (ImageView) vi.findViewById(R.id.tag_A);
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
if(event.getStartTime() != null && (position == 0 || !EventList.isSameTime(event.getStartTime(), events.get(position - 1).getStartTime()))) {
holder.time.setText(String.format("%tl:%tM", event.getStartTime(), event.getStartTime()));
holder.am.setText(String.format("%Tp", event.getStartTime()));
} else {
holder.time.setText("");
holder.am.setText("");
}
Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/main.ttf");
holder.title.setText(event.getTitle());
holder.title.setTypeface(font);
holder.location.setText(event.getLocationTitle());
holder.location.setTypeface(font);
//holder.description.setText(event.getDescription());
//holder.description.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/description.ttf"));
holder.color.removeAllViews();
if(event.isTypeA()) {
holder.color.addView(newColorView(R.drawable.tag_A));
} if(event.isTypeB()) {
holder.color.addView(newColorView(R.drawable.tag_B));
} if(event.isTypeC()) {
holder.color.addView(newColorView(R.drawable.tag_C));
} if(event.isTypeD()) {
holder.color.addView(newColorView(R.drawable.tag_D));
} if(event.isTypeE()) {
holder.color.addView(newColorView(R.drawable.tag_E));
}
if (position != 0) {
Log.i("EventScheduleAdapter", "position " + position + "event @ position: " + event.getTitle());
if (!EventList.isSameTime(event.getStartTime(), events.get(position - 1).getStartTime())) {
Log.i("EventScheduleAdapter", "Same time is FALSE");
if(holders.get(position - 1) == R.color.background_event_dark) {
Log.i("EventScheduleAdapter", "Different Color LIGHT");
holder.timeColor = R.color.background_event_light;
holders.add(holder.timeColor);
Log.i("EventScheduleAdapter", "position Color" + holders.get(position));
} else {
Log.i("EventScheduleAdapter", "Different Color DARK");
holder.timeColor = R.color.background_event_dark;
holders.add(holder.timeColor);
Log.i("EventScheduleAdapter", "position Color" + holders.get(position));
}
} else {
Log.i("EventScheduleAdapter", "Same time is TRUE");
holder.timeColor = holders.get(position - 1);
// holder.
//holder.timeColor = holder.get(position-1)
if (holder.timeColor == R.color.background_event_dark)
Log.i("EventScheduleAdapter", "SAME COLOR IS DARK");
if (holder.timeColor == R.color.background_event_light)
Log.i("EventScheduleAdapter", "SAME COLOR IS LIGHT");
holders.add(holder.timeColor);
Log.i("EventScheduleAdapter", "position Color" + holders.get(position));
}
} else {
Log.i("EventScheduleAdapter", "Position is 0");
holder.timeColor = R.color.background_event_dark;
holders.add(holder.timeColor);
}
holder.timeBackground.setBackgroundColor(context.getResources().getColor(holder.timeColor));
return vi;
}
/* Circle newColorView(int color) {
Circle layout = new Circle(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(50, 50);
params.setMargins(5, 5, 5, 5);
layout.setLayoutParams(params);
layout.setColor(color);
return layout;
} */
ImageView newColorView(int drawable) {
ImageView layout = new ImageView(context); // put drawable in here
LinearLayout.LayoutParams params;
if (drawable == R.drawable.tag_cp) {
params = new LinearLayout.LayoutParams(78, 50);
}
else if (drawable == R.drawable.tag_slo) {
params = new LinearLayout.LayoutParams(100, 50);
}
else {
params = new LinearLayout.LayoutParams(50, 50);
}
params.setMargins(5, 5, 5, 5);
layout.setLayoutParams(params);
layout.setImageResource(drawable);
return layout;
}
class ViewHolder {
int timeColor;
RelativeLayout timeBackground;
TextView time;
TextView am;
TextView title;
TextView location;
//TextView description;
LinearLayout color;
}
}
我不能post图片因为我是新会员:(但我会尽快
您不断向 holders
数组中添加您创建的每个项目。所以如果你被要求绘制 item0 3 次和 item1 3 次,你最终在数组中有 6 个条目。考虑使用 sparse array
或 int[]
。
例如,当您被要求为位置 X 创建视图时,您可以:
holders[X] = myColorId;