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

原创 2016年10月17日 11:25:03

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>
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

android高级组件(2)AutoCompleteTextView,MutiAutoCompleteTextView,Spinner,ListView

ListView 列表视图 支持数据源 divider : 分隔符 dividerHeight : 分隔符高度 listSelector : 被选中的条目变色,(如果需要按下变色...

Android 中万能的 BaseAdapter(Spinner,ListView,GridView) 的使用!

大家好!今天给大家讲解一下BaseAdapter(基础适配器)的用法,适配器的作用主要是用来给诸如(Spinner,ListView,GridView)来填充数据的。而(Spinner,ListVie...

Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!

大家好!今天给大家讲解一下BaseAdapter(基础适配器)的用法,适配器的作用主要是用来给诸如(Spinner,ListView,GridView)来填充数据的。而(Spinner,ListVie...

Android BaseAdapter在GridView,ListView,Spinner中的使用

Android中有许多的适配器,这些适配器的作用往往是用于提供填充数据的,一般如下拉选框Spinner,列表ListView和九宫格GridView都需要用到适配器来填充数据。尽管每一个都有其自己的适...

Android BaseAdapter(Spinner,ListView,GridView)的使用

我们看一下BaseAdapter已经实现了ListAdapter和SpinnerAdapter的接口,而GridView的适配器是实现了ListAdapter接口,只不过是二维的。所以说BaseAda...
  • MYBOYER
  • MYBOYER
  • 2013年03月17日 10:25
  • 639

Android高手进阶教程(十六)之---Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!

大家好!今天给大家讲解一下BaseAdapter(基础适配器)的用法,适配器的作用主要是用来给诸如(Spinner,ListView,GridView)来填充数据的。而(Spinner,ListVie...

Android高手进阶教程(十六)之---Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!

大家好!今天给大家讲解一下BaseAdapter(基础适配器)的用法,适配器的作用主要是用来给诸如(Spinner,ListView,GridView)来填充数据的。而(Spinner,ListVie...

Android高手进阶教程(十六)之---Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!

大家好!今天给大家讲解一下BaseAdapter(基础适配器)的用法,适配器的作用主要是用来给诸如(Spinner,ListView,GridView)来填充数据的。而(Spinner,ListVie...

Android高手进阶教程(十五)---Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!

大家好!今天给大家讲解一下BaseAdapter(基础适配器)的用法,适配器的作用主要是用来给诸如(Spinner,ListView,GridView)来填充数据的。而(Spinner,ListVie...

android 高级组件之Spinner

spinner 其实就是一个列表选择框,不过android的列表选择框并不是需要显示下拉列表的, 相当于弹出一个菜单供用户选择。 spinner 是ViewGrop的一个间接子类,因此他可以充...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android中的高级组件(二)(Spinner,ListView,GridView)
举报原因:
原因补充:

(最多只允许输入30个字)