android中的高级组件(二)(Spinner,ListView,GridView)

来源:互联网 发布:telnet 服务 linux 编辑:程序博客网 时间:2024/06/02 00:17

Spinner 列表选择框

Spinner是一个下拉列表,通常用于选择一系列可选择的列表项,它可以使用适配器,也可以
直接设置数组源。

android:entries=”@array/xx”/>//设置数组源

通过setOnItemSelectedListener来监听他的改变

示例图如下;

这里写图片描述

public class MainActivity extends Activity {    Spinner spinner;    String[] array = { "", "普快", "空调", "特快", "动车", "高铁" };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        spinner = (Spinner) findViewById(R.id.spinner);        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,                android.R.layout.simple_spinner_item, array);        spinner.setAdapter(adapter);        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {            @Override            public void onItemSelected(AdapterView<?> parent, View view,                    int position, long id) {                // position 就是选中的条目,从0开始                String zheng = getResources().getStringArray(R.array.select)[position];//这种方式是把数值放在xml中                //直接从数组中取得用 String  zheng = array[position]                 Toast.makeText(getBaseContext(), zheng, Toast.LENGTH_SHORT)                        .show();            }            @Override            public void onNothingSelected(AdapterView<?> parent) {                // 从没触发过                Log.e("TAG", "------------->>没有选择");            }        });    }}//xml中的配置<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.lesson7_spinner.MainActivity" >    <Spinner        android:id="@+id/spinner"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></RelativeLayout>

values中的strings.xml

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">Lesson7_Spinner</string>    <string name="hello_world">Hello world!</string>    <string name="action_settings">Settings</string>    <string-array name="select">        <item>结婚证</item>        <item>身份证</item>        <item>军官证</item>        <item>单身证</item>    </string-array></resources>

ListView列表视图

ListView是Android中最重要的一种视图,基本上是个软件基本都会使用ListView,它以垂直列
表形式列出需要显示的列表,只有通过Adapter才可以把列表中的数据映射到ListView中。
列表的显示需要三个元素:
ListVeiw 用来展示列表的View。
适配器用来把数据映射到ListView上的中介。
数据具体的将被映射的字符串,图片,或者基本组件

XML配置:
1.

实例图如下:

这里写图片描述

public class MainActivity extends Activity {    String[] names = { "范冰冰", "李晨", "王宝强", "小泽玛利亚", "吴京" };    String[] contents = {            "简介:范冰冰,1981年9月16日生于山东青岛,华语影视女演员、歌手、制片人。1996年参演电视剧《女强人》。1998年主演电视剧《还珠格格》系列成名,2001年起投身大银幕。",            "简介:李晨,1978年11月24日出生于北京市,中国内地影视男演员、监制、赛车手,毕业于北京群星艺术学院。",            "王宝强,1984年5月29日出生于河北省邢台市,中国内地男演员、导演。王宝强6岁开始练习武术,8岁在嵩山少林寺做俗家弟子。2003年,凭借剧情片《盲井》获得第40届台湾电影金马奖最佳新演员奖[1-2]  。2004年,因参演冯小刚执导的剧情片《天下无贼》而获得关注。",            "简介:小泽玛利亚(日语:小澤マリア、おざわ まりあ,英语:Ozawa Maria,1986年1月8日-)日本AV女优,出生于日本北海道,混血儿(父亲是法裔加拿大人,母亲是日本人),拥有欧洲人的面容和东方人的娇小体格。",            "姓名:吴京生日:1974年04月03日职业:演员,导演简介:吴京,1974年04月3日出生于北京,中国内地演员,导演。毕业于北京体育大学。1989年进入北京市武术队" };    int[] ids = { R.drawable.fbb, R.drawable.lichen, R.drawable.wangbaoqiang,R.drawable.xz,R.drawable.wj };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ListView lv = (ListView) findViewById(R.id.lv);        //适配器        List<HashMap<String, Object>> list = new ArrayList<HashMap<String,Object>>();        final List<Article> list2 = new ArrayList<MainActivity.Article>();        for (int i = 0; i < 5; i++) {            HashMap<String, Object> map = new HashMap<String, Object>();            map.put("img", ids[i]);            map.put("name", names[i]);            map.put("content", contents[i]);            list.add(map);            list2.add(new Article(ids[i],names[i] , contents[i]));        }        MyBaseAdapter2 adapter = new MyBaseAdapter2(this,list2);        lv.setAdapter(adapter);    }    public static class Article {        String name;        String content;        int id;        @Override        public String toString() {            return "int="+ id +",name=" + name + ", content=" + content + "]";        }        public Article(int id,String name, String content) {            super();            this.id = id;            this.name = name;            this.content = content;        }    }}

//自己写的一个适配器

public class MyBaseAdapter2 extends BaseAdapter {    private Context context;    private List<Article> list;    public MyBaseAdapter2(Context context, List<Article> list) {        this.context = context;        this.list = list;    }    @Override    public int getCount() {        // TODO Auto-generated method stub        return list == null ? 0 : list.size();    }    @Override    public Article getItem(int position) {        return null;    }    @Override    public long getItemId(int position) {        return 0;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder holder;        if (convertView == null) {            convertView = View.inflate(context, R.layout.item_layout, null);            holder = new ViewHolder(convertView);            convertView.setTag(holder);        } else            holder = (ViewHolder) convertView.getTag();        holder.setData(list.get(position));        return convertView;    }    // 对于一个较复杂的布局,组件比较多    class ViewHolder// 保存的是所有的布局上的组件    {        ImageView img;        TextView name;        TextView content;        public ViewHolder(View convertView) {            img = (ImageView) convertView.findViewById(R.id.img);            name = (TextView) convertView.findViewById(R.id.text1);            content = (TextView) convertView.findViewById(R.id.text2);            // convertView.setTag(this);        }        public void setData(Article a) {            img.setImageResource(a.id);            name.setText(a.name);            content.setText(a.content);        }    }}
//主xml<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.xykj.id05_10_11work7baseadapter.MainActivity" >  <ListView       android:id="@+id/lv"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      ></ListView></RelativeLayout>//显示样式的xml<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <ImageView         android:layout_width="80dp"        android:layout_height="80dp"        android:id="@+id/img"        android:src="@drawable/ic_launcher"        /><LinearLayout     android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="vertical"    android:layout_toRightOf="@id/img"    android:padding="10dp"    >    <TextView         android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/text1"        android:text="名字"/>    <TextView         android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/text2"        android:text="简介"/></LinearLayout></RelativeLayout>

GridView网格视图

GridView网格视图是按照行,列分布的方式来显示多个组件,通常用于显示图片或是图标等,在使
用网格视图时,首先需要要在屏幕上添加GridView组件。

常用属性:
1. android:columnWidth 用于设置列的宽度
2. android:gravity 用于设置对齐方式
3. android:horizontalSpacing 用于设置各元素之间的水平间距
4. android:numColumns 用于设置列数
5. android:stretchMode 用于设置拉伸模式,其中属性值可以是
6. //none(不拉伸),
7. //spacingWidth(仅拉伸元素之间的间距),
8. //columnWidth(仅拉伸表格元素本身)或
9. //spacingWidthUniform(表格元素本身,元素之间的间距一起拉伸)
10. android:verticalSpacing 用于设置各元素之间的垂直间距

GridView与ListView一样,都需要通过Adapter来提供显示的数据,ListView可以使用android:entries 来得到数据,但GridView不可以,必须通过适配器来为其添加数据。

GridView的事件和ListView一样,都是设
置 setOnItemClickListener(OnItemClickListener listener);

示例图如下:

这里写图片描述

public class MainActivity extends Activity {    GridView gr;    int[] ids = { R.drawable.p01, R.drawable.p02, R.drawable.p03,            R.drawable.p04, R.drawable.p05, R.drawable.p06, R.drawable.p07,            R.drawable.p08, R.drawable.p09, R.drawable.p10, R.drawable.p11,            R.drawable.p12 };//图片需要自己导入drawable目录下    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //这是用自己的布局        setContentView(R.layout.activity_main);        gr =  (GridView) findViewById(R.id.gr);        List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();        for (int i = 0; i < 12; i++) {            HashMap<String, Object> map = new HashMap<String, Object>();            map.put("img1", ids[i]);            data.add(map);        }        SimpleAdapter adapter = new SimpleAdapter(this, data,                R.layout.item_star, new String[] { "img1" },                new int[] { R.id.img1 });        //spinner.setAdapter(adapter);        gr.setAdapter(adapter);        gr.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view,                    int position, long id) {                final ImageView iv = (ImageView) findViewById(R.id.img2);                if (iv==null) {                     Toast.makeText(MainActivity.this, "xuanzhongl"+position, Toast.LENGTH_SHORT).show();                }else {                    iv.setImageResource(ids[position]);                }             }        });    }}
//主xml<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"      >    <GridView         android:numColumns="4"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/gr" />    <ImageView        android:id="@+id/img2"        android:layout_centerInParent="true"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></RelativeLayout>//显示样式的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"     >    <ImageView        android:id="@+id/img1"        android:stretchMode="columnWidth"        android:layout_width="80dp"        android:layout_height="80dp" /></LinearLayout>
0 0
原创粉丝点击