利用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:数组;
还有很多的东西需要去研究学习,希望每一天都有所进步!!