利用XML布局自定义列表样式
利用XML布局自定义列表样式之前在学习Spinner的时候就有这样的困惑,我们是不是可以自己定义列表的样式呢。因为我们使用系统自定义的样式的话有可能和我们的布局格格不入,显示的字样有可能很大很大。今天我们就来学习一下利用XML加适配器来自定义一个列表样式。不过在这里我们是以ListView为例效果是和Spinner一样的有些疑惑的小伙伴可以自己再去尝试一下给Spinner自定义一下列表样式。 首先我们写一个XML,作为整体的框架布局main_linearlayout.xml <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height=android:orientation="vertical"> TextView "fill_parent" "wrap_content" android:text="@string/tv_content" android:textSize="40sp" android:textStyle="bold" android:gravity="center_horizontal"/> ListView android:id="@+id/lv_names" "wrap_content" > </ListView> LinearLayout 框架布局是用来定义整体的框架,即在activity活动状态时候的样子。现在整体框架有了就可以设计一下listview的样式了。 然后再写一个XML布局文件tablelist.xml,这个文件是设计列表样式的,可以自定义字体大小、颜色以及字体样式。 TableLayout"match_parent"TableRow "wrap_content"ImageView "@+id/iv_image" "0sp" android:layout_weight="2" android:src="@drawable/ali02"/> "@+id/file_id" "3" "bottom" "30px""@+id/file_name" "5" TableRowTableLayout 当我们设计好框架和样式之后就开始进入适配阶段了,接下来就是到MainActivity.java中 packagecom.li.adapterdemo; importjava.util.ArrayList; importjava.util.HashMap; importjava.util.List; importjava.util.Map; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.Menu; importandroid.view.View; importandroid.view.ViewGroup; importandroid.widget.BaseAdapter; importandroid.widget.ListView; importandroid.widget.SimpleAdapter; publicclassMainActivityextendsActivity{ privateListViewlv; //定义一个ListView控件 privateString[][]names; //创建一个二维String类型的数组 privateList<Map<String,Object>>list; //定义一个嵌套了Map集合的List集合 privateSimpleAdapteradapter; //定义一个适配器 @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main_linearlayout); //加载布局文件 lv=(ListView)findViewById(R.id.lv_names); //获得ListView控件 names=newString[][]{ //数组赋值 {{“张三”,”32145687987”}, {“李四”,”321423423487”}, ......(根据需要自己添加数据)} list=newArrayList<Map<String,Object>>(); //实例化集合对象 for(inti=0;i<names.length;i++){ //循环赋值 Map<String,Object>map=newHashMap<String,Object>(); //每次循环都建立一个新的Map集合添加到List集合中 map.put("file_image",R.drawable.ali02); //每次每个Map集合中的都有固定的键值,方便之后的映射 map.put("file_id",names[i][0]); map.put("file_name",names[i][1]); list.add(map); } adapter=newSimpleAdapter(this,list, R.layout.tablelist,newString[]{"file_image","file_id"}, newint[]{R.id.iv_image,R.id.file_id}); //通过适配器实现String元素与界面元素组件的绑定 lv.setAdapter(adapter); //加载适配器 } @Override publicbooleanonCreateOptionsMenu(Menumenu){ //Inflatethemenu;thisaddsitemstotheactionbarifitispresent. getMenuInflater().inflate(R.menu.main,menu); returntrue; } } 其实文字适配器也可以自定义列表的样式的: ArrayAdapter<String>adapter=newArrayAdapter<String>(getApplicationContext(),R.layout.list_items,R.id.tv_name,names); getApplicationContext():是当前app应用的内容; R.layout.list_items:是自定义的列表样式; R.id.tv_name:是样式中的组件的名字; Names:数组; 还有很多的东西需要去研究学习,希望每一天都有所进步!! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |