上一篇写了侧滑菜单的出现和一个简单的动画效果,今天就要记录一下,自定义ListView的实现了和沉浸式状态栏的实现,都是很简单的内容。先说一下自定义ListView;
(1)自定义的ListView只需要很简单的几步:
a.写一个布局文件定义每一个item的样式;
b.为自定义的样式写一个adapter;
c.为ListView分配adapter,初始化ListView;
d.添加一些简单的选中效果,我做的选中效果是默认状态下选中第一个item,选中某个item后侧滑菜单会收起,再次打开侧滑菜单的时候,还是上次选中的item被选中;
下面是LiteView中Item的布局文件,可以看到,我的布局很简单就是一张图片和一个文字。
接下来是一个控制选中效果的selecter,结果并不是我想要的那种,但也还是贴上来吧,希望能得到大师的指点1、2;采用这种方式的问题是,只是选中的瞬间背景会变色,而不是我想要的那种选中了之后一直保持灰色的样子,最后我是通过在java代码中选中后改变样式的(这种方式会不会很蠢?)
下面是要实现自定义的Adapter了,这个要继承BaseAdapter,实现其中的一些方法,最主要的是getView方法。比较简单的一些东西,应该都看的懂,以后自己看也不至于看不懂,不写注释啦~~~
public class listViewAdapter extends BaseAdapter {
private ImageView image;
private TextView text;
private List
private LayoutInflater layoutInflater;
private Context context;
public listViewAdapter(Context context,List
//构造方法,data是要显示在ListView上的数据
this.context=context;
this.data=data;
this.layoutInflater=LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return data.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
//R.layout.list_item这个Layout就是自定义的item的layout啦
arg1 = layoutInflater.inflate(R.layout.list_item, null);
image = (ImageView)arg1.findViewById(R.id.image);
text = (TextView)arg1.findViewById(R.id.title);
image.setImageResource((Integer)data.get(arg0).get("image"));
text.setText((String)data.get(arg0).get("title"));
return arg1;
}
}
之后就是要在activity中为这个ListView绑定适配器和赋值啦
....
//实例化ListView
leftMenu =(ListView)findViewById(R.id.left_menu);
List
//上的数据了,getMenuList();是一个我写的获取数据的方法
leftMenu.setAdapter(new listViewAdapter(this, list));
.....
private List
List
Map map0=new HashMap();
map0.put("image", R.drawable.sliding_allpractice_normal);
map0.put("title", "全部练习");
list.add(map0);
Map map1=new HashMap();
map1.put("image", R.drawable.sliding_everydaypractice_normal);
map1.put("title", "每日一练");
list.add(map1);
Map map2=new HashMap();
map2.put("image", R.drawable.sliding_mynote_normal);
map2.put("title", "我的笔记");
list.add(map2);
//此处省略部分代码。。。。
return list;
}
这样运行一下程序ListView就是可以有内容的了,写的比较省略,恐怕也就我自己可以看懂了吧。下面是给ListView添加响应事件了
我是实现了onItemClick这个接口
public class HomeActivity extends Activity implements OnItemClickListener{......}
//给leftMenu绑定响应方法
leftMenu.setOnItemClickListener(this);
//实现响应方法,我是在这里实现选中的时候改变背景和选中图片还有颜色的!!!
//private View preView=null;//上一个选中的ListView
private int preNo=0;//上一个选中的ListView的序号
ps:有尖括号的地方会被吞掉,搞得我好心塞,明天转战csdn试试了。
关于沉浸式状态栏就是两行代码的事了
//透明状态栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明导航栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
然后在布局文件的红色导航栏上加上这两句
android:clipToPadding="true"
android:fitsSystemWindows="true"
ps:好多代码都会被吞掉,好失落啊。。。