Android常用高级控件学习笔记之列表视图

ListView类的使用方法:只需初始化所需要的数据,然后创建适配器并将其设置为ListView,ListView便将信息以列表的形式显示在页面中。

1).先列出涉及到的知识点吧

a.ImageView类的简介
              表一 ImageView中常用属性及对应方法说明

属性名称                对应方法              说明

android:adjustViewBounds  setAdjustViewBounds(boolean)   设置是否需要ImageView调整自己的边界来保证所显示的图片的长度比例

android:maxHeight      setMaxHeight(int)         ImageView的最大高度,可选

android:maxWidth      setMaxWidth(int)         ImageView的最大宽度,可选

android:scaleType      setScaleType(ImageView.ScaleType) 控制图片应如何调整或移动来适合ImageView的尺寸

android:src         setImageResource(int)       设置ImageView要显示的图片

              表二 ImageView中常用方法说明

方法名称                说明

setAlpha(int alpha)          设置ImageView的透明度

setImageBitmap(Bibmap bm)       设置ImageView所显示的内容为指定Bitmap对象

setImageDrawable(Drawable drawable) 设置ImageView所显示的内容为指定Drawable

setImageResource(int resId)      设置ImageView所显示的内容为指定id的资源

setImageURI(int uri)             设置ImageView所显示的内容为指定Uri

setSelected(boolean selected)     设置ImageView的选中状态

2).案例-一个简单的名人录

a.将程序中要用到的图片资源存放到res/drawable-mdpi目录下

Android常用高级控件学习笔记之列表视图

Android常用高级控件学习笔记之列表视图

Android常用高级控件学习笔记之列表视图

Android常用高级控件学习笔记之列表视图

Android常用高级控件学习笔记之列表视图

 

 

b.先配置strings.xml文件,编辑如下所示代码:

<resources>
    <string name="app_name">ListViewExample</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_sample_5_3">Sample_5_3</string>
    <string name="hello">您选择了</string>
    <string name="andy">Andy Rubin \nAndroid的创造者</string>
    <string name="bill">Bill Joy \nJava的创造者之一</string>
    <string name="edgar">Edgar F.Codd \n关系数据库之父</string>
    <string name="torvalds">Linus Torvalds \nLinux之父</string>
    <string name="turing">Turing Alan \nIT的祖师爷</string>
    <string name="ys">您选择了</string>
</resources>

c.在res/values目录下创建一个colors.xml文件,并输入如下代码:

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#fd8d8d</color>
    <color name="green">#9cfda3</color>
    <color name="bule">#8d9dfd</color>
    <color name="white">#FFFFFF</color>
    <color name="black">#000000</color>
    <color name="gray">#050505</color>
</resources>

 

d.编写布局文件main.xml,代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:background="#000000" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/TextView01"
        android:textSize="24dip"
        android:textColor="@color/white"
        android:padding="@dimen/padding_medium"
        android:text="@string/hello"
        tools:context=".Sample_5_3"
        />
    <ListView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/ListView01"
        android:choiceMode="singleChoice"
        />
           
</LinearLayout>

e.编写Sample-5-3.java文件,代码如下:

package com.example.sample_5_3;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

public class Sample_5_3 extends Activity 
{
    //所有资源图片id的数组
    int[] drawableIds = 
        { R.drawable.andy, R.drawable.bill, R.drawable.edgar,
            R.drawable.torvalds, R.drawable.turing };
    //所有资源字符串id的数组
    int[] msgIds= 
        { R.string.andy, R.string.bill, R.string.edgar,
            R.string.torvalds, R.string.turing };
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ListView lv = (ListView)this.findViewById(R.id.ListView01);//初始化ListView
        BaseAdapter ba = new BaseAdapter()//为ListView准备内容适配器
        {
            public View getView(int arg0, View arg1, ViewGroup arg2)
            {    //动态生成每个下拉项对应的View,每个下拉项View由LinearLayout中包含的一个ImageView及一个TextView构成
                LinearLayout ll = new LinearLayout(Sample_5_3.this);//初始化LinearLayout
                ll.setOrientation(LinearLayout.HORIZONTAL);
                ll.setPadding(5,5,5,5);
                ImageView ii = new ImageView(Sample_5_3.this);//初始化ImageView
                ii.setImageDrawable(getResources().getDrawable(drawableIds[arg0]));//设置图片应如何调整或移动来适合ImageView的尺寸
                ii.setScaleType(ImageView.ScaleType.FIT_XY);//设置比例类型
                ii.setLayoutParams(new Gallery.LayoutParams(100,98));
                ll.addView(ii);//添加到LinearLayout中
                TextView tv = new TextView(Sample_5_3.this);//初始化TextView
                tv.setText(getResources().getText(msgIds[arg0]));//设置内容
                tv.setTextSize(24);
                tv.setTextColor(Sample_5_3.this.getResources().getColor(R.color.white));
                tv.setPadding(5,5,5,5);//设置四周留白
                tv.setGravity(Gravity.LEFT);
                ll.addView(tv);
                return ll;
            }
            public long getItemId(int arg0)//重写的getItemId方法
            {
                return 0;
            }
            public Object getItem(int arg0)//重写的getItem方法
            {
                return null;
            }
            public int getCount()
            {
                return 5;//总共5个选项
            }
        };
        lv.setAdapter(ba);//为ListView设置内容适配器
        //设置选项选中的监听器
        lv.setOnItemSelectedListener(new OnItemSelectedListener()
        {
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3)//重写选项被选中事件的处理方法
            {
                TextView tv = (TextView)findViewById(R.id.TextView01);//获取主界面TextView
                LinearLayout ll = (LinearLayout)arg1;//获取当前选中选项对应的LinearLayout
                TextView tvn = (TextView)ll.getChildAt(1);//获取其中的TextView
                StringBuilder sb = new StringBuilder();//用StringBuilder动态生成信息
                sb.append(getResources().getText(R.string.ys));
                sb.append(":");
                sb.append(tvn.getText());
                String stemp = sb.toString();
                tv.setText(stemp.split("\\n")[0]);//信息设置进主界面TextView
            }
            public void onNothingSelected(AdapterView<?> arg0)
            {
            }
        });
        lv.setOnItemClickListener(new OnItemClickListener()
        {

            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3)//重写选项被单击事件的处理方法
            {
                TextView tv = (TextView)findViewById(R.id.TextView01);//获取主界面TextView
                LinearLayout ll = (LinearLayout)arg1;//获取当前选中选项对应的LinearLayout
                TextView tvn = (TextView)ll.getChildAt(1);//获取其中的TextView
                StringBuilder sb = new StringBuilder();//用StringBuilder动态生成信息
                sb.append(getResources().getText(R.string.ys));
                sb.append(":");
                sb.append(tvn.getText());//得到文本
                String stemp = sb.toString();
                tv.setText(stemp.split("\\n")[0]);//信息设置进主界面TextView
            }
        });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

f.程序运行界面如下:

Android常用高级控件学习笔记之列表视图


至此,程序完成。

另:对于此项目的网格视图展示如下:

1.res/values目录下的strings.xml文件代码:

 

<resources>
    <string name="app_name">Sample_5_4</string>
    <string name="menu_settings">Settings</string>
    <string name="hello">当前无选中选项</string>
    <string name="andy">Andy Bubin</string>
    <string name="bill">Bill Joy</string>
    <string name="edgar">Edgar F.Codd</string>
    <string name="torvalds">Linus Torvalds</string>
    <string name="turing">Turing Alan</string>
    <string name="andydis">Android的创造者</string>
    <string name="billdis">Java创造者之一</string>
    <string name="edgardis">关系数据库之父</string>
    <string name="torvaldsdis">Linux之父</string>
    <string name="turingdis">IT的祖师爷</string>
</resources>

 

2.在res/values中创建colors.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#fd8d8d</color>
    <color name="green">#9cfda3</color>
    <color name="blue">#8d9dfd</color>
    <color name="white">#FFFFFF</color>
    <color name="black">#000000</color>
    <color name="gray">#050505</color>
</resources>

3.res/values目录下的main.xml文件代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:background="#000000"
    android:layout_height="match_parent" >
    <TextView
        android:id="@+id/TextView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello"
        android:textColor="@color/white"
        android:textSize="24dip"
        tools:context=".Sample_5_4" 
        />
    <GridView 
        android:id="@+id/GridView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:verticalSpacing="5dip"
        android:horizontalSpacing="5dip"
        android:stretchMode="columnWidth"
        android:background="#000000"
        />
</LinearLayout>

3.在res/values目录下创建grid_row.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout01"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >
    <ImageView 
        android:id="@+id/ImageView01"
        android:scaleType="fitXY"
        android:layout_width="98dip"
        android:layout_height="98dip" />
    <TextView 
        android:id="@+id/TextView02"
        android:layout_width="100dip"
        android:layout_height="wrap_content"
        android:textColor="@color/white"
        android:textSize="24dip"
        android:background="#000000"
        android:paddingLeft="5dip" />
    <TextView 
        android:id="@+id/TextView03"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/white"
        android:background="#000000"
        android:textSize="24dip"
        android:paddingLeft="5dip"  />
</LinearLayout>

4.java文件如下:

package com.example.sample_5_4;

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.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class Sample_5_4 extends Activity
{
    // 所有资源图片id的数组
    int[] drawableIds = { R.drawable.andy, R.drawable.bill, R.drawable.edgar,
            R.drawable.torvalds, R.drawable.turing };
    // 所有资源字符串id的数组
    int[] nameIds = { R.string.andy, R.string.bill, R.string.edgar,
            R.string.torvalds, R.string.turing };
    int[] msgIds = { R.string.andydis, R.string.billdis, R.string.edgardis,
            R.string.torvaldsdis, R.string.turingdis };

    public List<? extends Map<String, ?>> generateDataList()//得到数据
    {
        ArrayList<Map<String, Object>> list = new ArrayList
                <Map<String, Object>>();
        int rowCounter = drawableIds.length;//得到表格的行数
        for(int i = 0 ; i < rowCounter; i++)
        {//循环生成每行包含对应各个列数据的Map; col1,col2.col3为列名
            HashMap<String, Object> hmap = new HashMap<String, Object>();
            hmap.put("col1", drawableIds[i]);//第一列为图片
            hmap.put("col2", this.getResources().getString(nameIds[i]));//第二列为姓名
            hmap.put("col3", this.getResources().getString(msgIds[i]));//第三列为描述
            list.add(hmap);
        }
        return list;
    }

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        GridView gv = (GridView)this.findViewById(R.id.GridView01);//得到GridView的引用
        SimpleAdapter sca = new SimpleAdapter(
                this,
                generateDataList(),
                R.layout.grid_row, //对应Layout的id
                new String[]{"col1", "col2","col3"}, //列表名称
                new int[]{ R.id.ImageView01, R.id.TextView02, R.id.TextView03} //列对应控件id列表
                );
        gv.setAdapter(sca);//设置数据适配器
        gv.setOnItemSelectedListener(
                new OnItemSelectedListener()
                {
                    public void onItemSelected(AdapterView<?> arg0, View arg1,
                            int arg2, long arg3)//重写选项被选中事件的处理方法
                    {
                        TextView tv = (TextView)findViewById(R.id.TextView01);//获取主界面TextView
                        LinearLayout ll = (LinearLayout)arg1;//获取当前选中选项对应的LinearLayout
                        TextView tvn = (TextView)ll.getChildAt(1);//获取其中的TextView
                        TextView tvnL = (TextView)ll.getChildAt(2);//获取其中的TextView
                        StringBuilder sb = new StringBuilder();
                        sb.append(tvn.getText());//获取姓名信息
                        sb.append(" ");
                        sb.append(tvnL.getText());//获取描述信息
                        tv.setText(sb.toString());//信息设置进主界面TextView
                    }
                    public void onNothingSelected(AdapterView<?> arg0)
                    {
                    }
                });
        gv.setOnItemClickListener( //设置选项被单击的监听器
                new OnItemClickListener()
                {
                    public void onItemClick(AdapterView<?> arg0, View arg1,
                            int arg2, long arg3)//重写选项被单击事件的处理方法
                    {
                        TextView tv = (TextView)findViewById(R.id.TextView01);//获取主界面TextView
                        LinearLayout ll = (LinearLayout)arg1;//获取当前选中选项对应的LinearLayout
                        TextView tvn = (TextView)ll.getChildAt(1);//获取其中的TextView
                        TextView tvnL = (TextView)ll.getChildAt(2);//获取其中的TextView
                        StringBuilder sb = new StringBuilder();
                        sb.append(tvn.getText());//获取姓名信息
                        sb.append(" ");
                        sb.append(tvnL.getText());//获取描述信息
                        tv.setText(sb.toString());//信息设置进主界面TextView
                    }
                });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/yujiaqiang/archive/2012/09/15/2686007.html