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目录下
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.程序运行界面如下:
至此,程序完成。
另:对于此项目的网格视图展示如下:
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