自定义ArrayAdapter实现listview分割线的多种颜色

来源:互联网 发布:html select js 编辑:程序博客网 时间:2024/05/15 23:50
   前不久在做一道安卓实验练习题时发现listview的item下方分割线的颜色有所不同,如下图两箭头所示,通过对比即可分辨。当时第一时间想到的是listview有没有相关的方法可以实现这一效果,但经过一番查找,没有。那它是如何达到这种效果的呢,又经过一番思索,发现是自定义ArrayAdater,更改子项view的布局而来的。




   废话少说,贴上代码如下:

  1.activity_main.xml

 <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.example.yekong.homework4.MainActivity">    <TextView        android:layout_width="match_parent"        android:layout_height="40dp"        android:text="ArrayList Demo"        android:textSize="30dp"        android:layout_gravity="center"        android:gravity="center"        android:background="@color/tool_bg"        />  <LinearLayout      android:layout_width="match_parent"      android:layout_height="wrap_content"      >    <ListView        android:id="@+id/listview1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:divider="#f00"        android:dividerHeight="2dp"        >    </ListView>  </LinearLayout>    <ListView        android:id="@+id/listview2"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:divider="@drawable/bg1"        android:dividerHeight="2dp"        >    </ListView></LinearLayout>

  2.array_item.xml

 <?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    ><TextView    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:id="@+id/show_text"    android:paddingStart="?android:attr/expandableListPreferredItemPaddingLeft"    android:textAppearance="?android:attr/textAppearanceListItem"    android:textAlignment="viewStart"    ></TextView> <!--注意这里定义了一个TextView控件,作为分割线--> <TextView     android:id="@+id/line_bg"     android:layout_width="match_parent"     android:layout_height="2dp" /></LinearLayout>

  3.list_item.xml

<?xml version="1.0" encoding="utf-8"?><CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:id="@+id/list_item_textview"    android:paddingStart="?android:attr/expandableListPreferredItemPaddingLeft"    android:textAppearance="?android:attr/textAppearanceListItem"    android:textAlignment="viewStart"    android:checked="true"    android:checkMark="?android:attr/textCheckMark"    ></CheckedTextView>

  4.MainActivit.java

package com.example.yekong.homework4;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends AppCompatActivity {    private ListView listView1=null;    private ListView listView2=null;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();    }    public void init(){        listView1=(ListView)findViewById(R.id.listview1);        listView2=(ListView)findViewById(R.id.listview2);        MyAdapter adapter=new MyAdapter(this,R.layout.array_item,getResources().getStringArray(R.array.list_content1));        listView1.setAdapter(adapter);        listView2.setAdapter(new ArrayAdapter<String>(this,R.layout.list_item,getResources().getStringArray(R.array.list_content2)));        listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {              getToast("you  click item "+i);            }        });    }    public void getToast(String content){        Toast.makeText(this,content,Toast.LENGTH_SHORT).show();    }}

  5.MyAdapter.java

package com.example.yekong.homework4;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.TextView;import java.util.List;/** * Created by YeKong on 2017/5/31. *///自定义ArrayAdapter,;重载子view布局public class MyAdapter extends ArrayAdapter<String> {    Context context;    LayoutInflater inflater;    List<String> list=null;    String[] str=null;    public MyAdapter(Context context, int resource, String[] objects) {        super(context, resource, objects);        this.context=context;        this.inflater=LayoutInflater.from(context);        this.str=objects;    }    public MyAdapter(Context context, int resource, List<String> objects) {        super(context, resource, objects);        this.context=context;        this.list=objects;    }    @Override    public String getItem(int position) {        return super.getItem(position);    }    @Override    public int getPosition(String item) {        return super.getPosition(item);    }    @Override    public int getCount() {        return super.getCount();    }    @Override    public long getItemId(int position) {        return super.getItemId(position);    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        final Holder holder;        if(convertView==null){            holder = new Holder();            convertView=inflater.inflate(R.layout.array_item, null);//加载子项item的布局文件            holder.textView1=(TextView) convertView.findViewById(R.id.show_text);            holder.textView2=(TextView) convertView.findViewById(R.id.line_bg);            convertView.setTag(holder);        }else{            holder=(Holder)convertView.getTag();        }        holder.textView1.setText(str[position]);        switch (position){            case 0:                holder.textView2.setBackgroundColor(context.getResources().getColor(R.color.colorAccent));            break;            case 1:                holder.textView2.setBackgroundColor(context.getResources().getColor(R.color.divider1));                break;            case 2:                holder.textView2.setBackgroundColor(context.getResources().getColor(R.color.divider2));                break;        }        return convertView;    }    class Holder{        TextView textView1,textView2;    }}
   运行项目,效果如下图,可以看到第一个listview中每条分割线的颜色都不一样了

原创粉丝点击