根据对象数据自定义Listview项

时间:2015-08-28 14:04:32

标签: android xml listview parse-platform autocompletetextview

我试图弄清楚是否可以根据对象的属性更改Listview中单个元素的外观,在本例中为背景颜色和textcolor。

该物体代表一辆具有背景颜色,文字颜色,有轨电车号码的电车。

我在想这样的事情

enter image description here

用法是一个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>

欢迎任何建议

1 个答案:

答案 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()));

产生此结果

this