我试图弄清楚是否可以根据对象的属性更改Listview中单个元素的外观,在本例中为背景颜色和textcolor。
该物体代表一辆具有背景颜色,文字颜色,有轨电车号码的电车。
我在想这样的事情
用法是一个AutoCompleteTextView,用户可以输入一个数字,然后应用程序将列出所有可能的匹配。
我使用解析将数据对象存储在数据库中,存储/检索方面不是问题。
我可以做到,非常难看,
TextView line = (TextView) convertView.findViewById(R.id.transportline);
if(ctrlListItems.get(position).getLine().equals("1")){
line.setBackgroundColor(Color.BLUE);
}
但我宁愿使用像
这样的XML文件line.setBackground(drawable/line_white);
其中
line_white
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- view background color -->
<solid
android:color="@color/tram_white_bg" >
</solid>
<!-- view border color and width -->
<stroke
android:width="1dp"
android:color="@color/tram_border_gray" >
</stroke>
<!-- The radius makes the corners rounded -->
<corners
android:radius="2dp" >
</corners>
欢迎任何建议
答案 0 :(得分:0)
我决定将文本/背景颜色的颜色信息移植到解析数据对象,因为我很可能会稍后将应用程序移植到iOS。它们作为字符串存储在Parse数据库中作为&#34; #fffff&#34;
我使用Shape Drawable作为数字的标准布局。
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- view background color -->
<solid
android:color="@color/tram_white_bg" >
</solid>
<!-- view border color and width -->
<stroke
android:width="1dp"
android:color="@color/tram_border_gray" >
</stroke>
<!-- The radius makes the corners rounded -->
<corners
android:radius="2dp" >
</corners>
并且在我的自定义ArrayAdapter中,我可以避免很多if / case来确定颜色,这使得应用程序更容易扩展并添加更多对象。
GradientDrawable shape = (GradientDrawable)holder.lineNumber.getBackground();
shape.setColor(Color.parseColor(line.getBgColor()));
holder.lineNumber.setTextColor(Color.parseColor(line.getTextColor()));
产生此结果