【问题标题】:Android set listItem background colour from String ArrayAndroid从字符串数组设置listItem背景颜色
【发布时间】:2013-10-29 11:42:56
【问题描述】:

有谁知道如何以编程方式从字符串数组中设置列表项的背景?我有两个字符串数组,一个是文本视图的标题,另一个包含颜色参考。我已将标题数组添加到数组适配器并正在显示,但现在我想更改数组中每个项目的背景颜色

这是我的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="50dp"
      >

    <TextView
        android:id="@android:id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="18dp"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:gravity="center" />

</RelativeLayout> 

这是我目前的代码

     ListView menuList = (ListView) findViewById(R.id.listView1);
        String[] items = {"menuItem1","menuItem2","menuItem3","menuItem4","menuItem4","menuItem5","menuItem6","menuItem7","menuItem8"};  
  String[] colors = {"#ffffff","#000000","#ffffBB","#ffffDD","#ff654d","#ffffff","#ffffff","#ffffff","#ffffff"};   
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.drawer_list_item, android.R.id.text1, items);
        menuList.setAdapter(adapter);

【问题讨论】:

  • 您想在列表视图中有 2 种不同的颜色??这就是你正在尝试的??
  • 是的,列表中的每个项目都需要不同的背景颜色

标签: android


【解决方案1】:

使用自定义适配器如下:

public class MyAdapter extends ArrayAdapter<String> {

    Context context; 
    int layoutResourceId;    
    String data[] = null;
    String color[] = null;

    public MyAdapter(Context context, int layoutResourceId, String[] data, String[] color) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
        this.color = color;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        StringHolder holder = null;

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new StringHolder();
            holder.txtTitle = (TextView)row.findViewById(R.id.text1);

            row.setTag(holder);
        }
        else
        {
            holder = (StringHolder)row.getTag();
        }

        holder.txtTitle.setText(data[position]);
        row.setBackgroundColor(Color.parseColor(color[position]));

        return row;
    }

    static class StringHolder
    {
        TextView txtTitle;
    }
}

然后设置listView的适配器如下:

ArrayAdapter<String> adapter = new MyAdapter(this, R.layout.drawer_list_item, items, colors);
menuList.setAdapter(adapter);

更新刚刚注意到:您还需要更新布局文件。它似乎错误地定义了 textview 的 id。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="50dp"
        >

    <TextView
            android:id="@+id/text1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="18dp"
            android:text="Large Text"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:gravity="center" />

</RelativeLayout> 

结果如下:

【讨论】:

    【解决方案2】:

    这是我为 2 种颜色所做的。

    我在 color.xml 中保留了 2 个颜色字符串,并在列表视图的自定义适配器中使用了它

    if (position % 2 == 0)
    
                convertView.setBackgroundResource(R.color.color1);
            else
                convertView.setBackgroundResource(R.color.color2);
    

    【讨论】:

      【解决方案3】:

      您可以使用自定义数组适配器。扩展ArrayAdapter并覆盖getView,根据参数position返回一个带有背景色的textview。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-04
        • 1970-01-01
        • 2013-04-02
        • 2016-09-01
        • 2012-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多