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

来源:互联网 发布:在淘宝怎么开店 编辑:程序博客网 时间:2024/06/01 15:49

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

之前在学习Spinner 的时候就有这样的困惑,我们是不是可以自己定义列表的样式呢。因为我们使用系统自定义的样式的话有可能和我们的布局格格不入,显示的字样有可能很大很大。今天我们就来学习一下利用XML加适配器来自定义一个列表样式。不过在这里我们是以ListView为例效果是和Spinner一样的有些疑惑的小伙伴可以自己再去尝试一下给Spinner自定义一下列表样式。

首先我们写一个XML,作为整体的框架布局main_linearlayout.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    

    <TextView 

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/tv_content"

        android:textSize="40sp"

        android:textStyle="bold"

        android:gravity="center_horizontal"/>

    <ListView 

        android:id="@+id/lv_names"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        >

    </ListView>

</LinearLayout>

 

框架布局是用来定义整体的框架,即在activity活动状态时候的样子。现在整体框架有了就可以设计一下listview的样式了。

然后再写一个XML布局文件tablelist.xml,这个文件是设计列表样式的,可以自定义字体大小、颜色以及字体样式。

<?xml version="1.0" encoding="utf-8"?>

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

 

    <TableRow

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" >

 

        <ImageView

            android:id="@+id/iv_image"

            android:layout_width="0sp"

            android:layout_height="wrap_content"

            android:layout_weight="2"

            android:src="@drawable/ali02" />

 

        <TextView

            android:id="@+id/file_id"

            android:layout_width="0sp"

            android:layout_height="fill_parent"

            android:layout_weight="3"

            android:gravity="bottom"

            android:textSize="30px" />

 

        <TextView

            android:id="@+id/file_name"

            android:layout_width="0sp"

            android:layout_height="fill_parent"

            android:layout_weight="5"

            android:gravity="bottom"

            android:textSize="30px" />

    </TableRow>

 

</TableLayout>

 

当我们设计好框架和样式之后就开始进入适配阶段了,接下来就是到MainActivity.java

package com.li.adapterdemo;

 

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ListView;

import android.widget.SimpleAdapter;

 

public class MainActivity extends Activity {

 

private ListView lv; //定义一个ListView控件

private String[][] names; //创建一个二维String类型的数组

private List<Map<String, Object>> list; //定义一个嵌套了Map集合的List集合

private SimpleAdapter adapter; //定义一个适配器

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main_linearlayout); //加载布局文件

lv = (ListView) findViewById(R.id.lv_names); //获得ListView控件

names = new String[][] { //数组赋值

{{“张三”,”32145687987”},

{“李四”,”321423423487”},

......(根据需要自己添加数据)}

list = new ArrayList<Map<String, Object>>(); //实例化集合对象

for (int i = 0; i < names.length; i++) { //循环赋值

Map<String, Object> map = new HashMap<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 = new SimpleAdapter(this, list,

R.layout.tablelist, new String[] { "file_image","file_id" },

new int[] { R.id.iv_image,R.id.file_id}); //通过适配器实现String元素与界面元素组件的绑定

lv.setAdapter(adapter); //加载适配器

}

 

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

}

其实文字适配器也可以自定义列表的样式的:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.list_items,R.id.tv_name,names);

getApplicationContext():是当前app应用的内容;

R.layout.list_items:是自定义的列表样式;

R.id.tv_name:是样式中的组件的名字;

Names:数组;

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

 

0 0