zoukankan      html  css  js  c++  java
  • 专门用来显示大量数据的视图:AdapterView(1)

      AdapterView是一种用来展示大量数据的视图对象,AdapterView的内容一般是包含相同格式资源的控件,查阅Android文档知类的定义:

      从上可知AdapterView直接继承ViewGroup,间接继承View,因此它是一个系统组件,使用它,一般是直接使用它的子类,它的常见子类有ListView、Spinner,GridView和Gallery。

    查看AdapterView源码注意到,AdapterView类后面跟着泛型

      

      AdapterView的常用子类介绍:

      1.ListView  视图是一个列表,每一项的布局是一个自定义布局,可以使用系统已定义好的布局,合理的组合数据项的布局,可以展示不同类型的数据。

      2.Spinner  视图是一个下拉列表,每一项的内容只能是字符串数据,类型可以定义为多种类型。

      3.GridView    视图是一个网格,对比ListView来看,ListView是一个多行单列视图,而GridView是一个多行多列视图,它的列数根据实际需求自定义。

      4.Gallery   画廊视图,水平方向滑动,多用于展示图片,是一个可以把子项以中心锁定,水平滚动的列表。已经被ScrollView和ViewPicker取代了。

      1.ListView的使用:

      ListView类的定义:

      

      XML中的常用属性:

      android:layout_width;默认一般设置为match_parent或者fill_parent

      android:layout_height:默认一般设置为match_parent或者fill_parent

      android:layout_weight:根据需要来灵活设置android:layout_width和android:layout_height

      android:divider:设置相邻两个水平项之间的分隔条

      android:dividerHeight:设置相邻两个水平项之间的分隔条的高度

      android:entries:为视图绑定数据源,其中数据源必须是以xml文件定义的

      Java文件中常用方法:

      

      

      

      

      

      

      

      

      

      

      

      

      

      示例:

      1.数据源是xml文件定义的

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <resources>
     3 
     4     <string name="app_name">Day21_My_ListView</string>
     5     <string name="action_settings">Settings</string>
     6     <string name="hello_world">Hello world!</string>
     7 
     8     <string-array name="data">
     9         <item>这是ListView的第一条数据项</item>
    10         <item>这是ListView的第二条数据项</item>
    11         <item>这是ListView的第三条数据项</item>
    12         <item>这是ListView的第四条数据项</item>
    13     </string-array>
    14 
    15 </resources>
    strings.xml文件
     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:paddingBottom="@dimen/activity_vertical_margin"
     6     android:paddingLeft="@dimen/activity_horizontal_margin"
     7     android:paddingRight="@dimen/activity_horizontal_margin"
     8     android:paddingTop="@dimen/activity_vertical_margin"
     9     tools:context=".MainActivity" >
    10 
    11     <ListView
    12         android:id="@+id/listView"
    13         android:layout_width="match_parent"
    14         android:layout_height="match_parent"
    15         android:entries="@array/data">
    16     </ListView>
    17 
    18 </RelativeLayout>
    main_activity.xml文件
     1 package com.my.day21_my_listview1;
     2 
     3 import com.my.day21_my_listview1.R;
     4 
     5 import android.os.Bundle;
     6 import android.app.Activity;
     7 
     8 public class MainActivity extends Activity {
     9 
    10     @Override
    11     protected void onCreate(Bundle savedInstanceState) {
    12         super.onCreate(savedInstanceState);
    13         setContentView(R.layout.activity_main);
    14     }
    15 }
    Main_Activity

      2.数据源是动态定义的

     1 package com.my.day21_my_listview1;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import com.my.day21_my_listview1.R;
     7 
     8 import android.os.Bundle;
     9 import android.widget.ArrayAdapter;
    10 import android.widget.ListView;
    11 import android.app.Activity;
    12 
    13 public class MainActivity extends Activity {
    14     private List<String> datas;
    15     private ListView listView;
    16     private ArrayAdapter<String> adapter;
    17     
    18     @Override
    19     protected void onCreate(Bundle savedInstanceState) {
    20         super.onCreate(savedInstanceState);
    21         setContentView(R.layout.activity_main);
    22         
    23         datas = new ArrayList<String>();
    24         for(int i=1;i<=4;i++){
    25             datas.add("这是ListView的第"+i+"条数据项");
    26         }
    27         listView = (ListView) findViewById(R.id.listView);
    28         adapter = new ArrayAdapter<String>(this, android.R.layout.simple_gallery_item, datas);
    29         listView.setAdapter(adapter);
    30     }
    31 }
    Main_Activity

      效果图:

      2.Spinner的使用:

      Spinner的类定义:

      描述:

      常用方法:

      

      注:Spinner中的数据也可以以两个方式定义,一种是静态的xml定义,另一种是动态的完成数据源的初始化。

      示例:

      效果图:

      

      

     1 package com.my.day21_my_spinner;
     2 
     3 import android.os.Bundle;
     4 import android.app.Activity;
     5 import android.widget.ArrayAdapter;
     6 import android.widget.Spinner;
     7 
     8 public class MainActivity extends Activity {
     9     private Spinner spinner;
    10     private String[] datas = {"北京","上海","广州","深圳"};
    11     private ArrayAdapter<String> adapter;
    12     
    13     @Override
    14     protected void onCreate(Bundle savedInstanceState) {
    15         super.onCreate(savedInstanceState);
    16         setContentView(R.layout.activity_main);
    17         
    18         spinner = (Spinner) findViewById(R.id.spinner);
    19         adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,datas);
    20         adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    21         spinner.setAdapter(adapter);
    22     }
    23 
    24 }
    Main_Activity

      3.GridView的使用:

      以多行多列的形式显示数据,其中多列是定义的。

      在xml文件中的重要属性:

      

      示例:

      效果图:

     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:paddingBottom="@dimen/activity_vertical_margin"
     6     android:paddingLeft="@dimen/activity_horizontal_margin"
     7     android:paddingRight="@dimen/activity_horizontal_margin"
     8     android:paddingTop="@dimen/activity_vertical_margin"
     9     tools:context=".MainActivity" >
    10 
    11 
    12     <!--
    13         android:numColumns:列数
    14         android:horizontalSpacing:水平间距(列与列)
    15         android:verticalSpacing:垂直间距(行与行)
    16         android:columnsWidth:每一列的宽度
    17         android:stretchMode:设置剩余的宽度分配方式
    18 
    19     -->
    20 
    21     <GridView
    22         android:id="@+id/gridView"
    23         android:layout_width="match_parent"
    24         android:layout_height="match_parent"
    25         android:columnWidth="100dp"
    26         android:horizontalSpacing="5dp"
    27         android:numColumns="3"
    28         android:stretchMode="spacingWidthUniform"
    29         android:verticalSpacing="5dp" >
    30     </GridView>
    31 
    32 
    33 </RelativeLayout>
    activity_main
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical" >
     6     
     7     <ImageView
     8         android:id="@+id/imageView"
     9         android:layout_width="60dp"
    10         android:layout_height="60dp"
    11         android:scaleType="fitXY"
    12         android:src="@drawable/ic_launcher"
    13         />
    14     <TextView
    15         android:id="@+id/textView"
    16         android:layout_width="wrap_content"
    17         android:layout_height="wrap_content"
    18         android:text="@string/hello_world"
    19         />
    20     
    21 </LinearLayout>
    列表项布局
     1 package com.my.day21_my_gridview2;
     2 
     3 import java.util.ArrayList;
     4 import java.util.HashMap;
     5 import java.util.List;
     6 import java.util.Map;
     7 
     8 import android.os.Bundle;
     9 import android.app.Activity;
    10 import android.widget.GridView;
    11 import android.widget.SimpleAdapter;
    12 
    13 public class MainActivity extends Activity {
    14     private GridView gridView;
    15 
    16     @Override
    17     protected void onCreate(Bundle savedInstanceState) {
    18         super.onCreate(savedInstanceState);
    19         setContentView(R.layout.activity_main);
    20 
    21         gridView = (GridView) findViewById(R.id.gridView);
    22 
    23         int[] images = { R.drawable.sample_0, R.drawable.sample_1,
    24                 R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4,
    25                 R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 };
    26 
    27         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
    28 
    29         for (int i = 0; i < images.length; i++) {
    30             Map<String, Object> map = new HashMap<String, Object>();
    31             map.put("image", images[i]);
    32             map.put("name", "小狗" + i);
    33             list.add(map);
    34         }
    35 
    36         SimpleAdapter adapter = new SimpleAdapter(this, list,
    37                 R.layout.item_layout, new String[] { "image", "name" },
    38                 new int[] { R.id.imageView, R.id.textView });
    39 
    40         gridView.setAdapter(adapter);
    41 
    42     }
    43 }
    Main_Activity

      4.Gallery的使用

      Gallery的类定义:

      Gallery官方文档解释:

      示例:

      效果图:左右滑动,切换图片

      

      

     1 package com.my.day21_my_gallery;
     2 
     3 import java.util.ArrayList;
     4 import java.util.HashMap;
     5 import java.util.List;
     6 import java.util.Map;
     7 
     8 
     9 import android.os.Bundle;
    10 import android.widget.Gallery;
    11 import android.widget.SimpleAdapter;
    12 import android.app.Activity;
    13 
    14 public class MainActivity extends Activity {
    15     private List<Map<String, Object>> datas;
    16     private SimpleAdapter adapter;
    17     private Gallery gallery;
    18     private int[] images = { R.drawable.sample_0, R.drawable.sample_1,
    19             R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4,
    20             R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 };
    21 
    22     List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();    
    23     @Override
    24     protected void onCreate(Bundle savedInstanceState) {
    25         super.onCreate(savedInstanceState);
    26         setContentView(R.layout.activity_main);
    27         
    28         datas = new ArrayList<Map<String,Object>>();
    29         for(int i=0;i<images.length;i++){
    30             Map<String, Object> map = new HashMap<String, Object>();
    31             map.put("image", images[i]);
    32             datas.add(map);
    33         }
    34         
    35         gallery = (Gallery) findViewById(R.id.gallery);
    36         adapter = new SimpleAdapter(this, datas, R.layout.item_layot, new String[]{"image"}, new int[]{R.id.image});
    37         gallery.setAdapter(adapter);
    38     }
    39 }
    Main_Activity

      总结:综上所述,对于AdapterView这类视图,使用步骤类似,需要根据不同的场景选择合适的展示数据的视图。

      未完,待续。

  • 相关阅读:
    Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架
    关于activity_main.xml与fragment_main.xml
    在MAC OS 下配置python + Flask ,并支持pyCharm编辑器
    openshift云计算平台diy模式安装Python2.7+Flask
    flask程序部署在openshift上的一些注意事项
    windows下python+flask环境配置详细图文教程
    SegmentFault 2014黑客马拉松 北京 作品demo
    Flask —— 使用Python和OpenShift进行即时Web开发
    支付宝的简单使用
    iOS- 详解文本属性Attributes
  • 原文地址:https://www.cnblogs.com/enjoy-coding/p/4802039.html
Copyright © 2011-2022 走看看