利用XML布局自定义列表样式

前端之家收集整理的这篇文章主要介绍了利用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:数组;

还有很多的东西需要去研究学习,希望每一天都有所进步!!

猜你在找的XML相关文章