Grid View

Grid View 也是最近做的项目里面的UI之一,在Tab的一个标签里面嵌入Grid View。

先单独地把GridView拿出来理一遍吧,只是官方网站上的教程的资源都是静态的,没有涉及到数据的动态存取,这一点需要进一步的学习和探索,尤其是数据库SQLite的使用。

英文官方教程地址:http://developer.android.com/resources/tutorials/views/hello-gridview.html

Grid View (不知道中文翻译确切的该叫什么,就不翻译了吧)

GridView是一个以二维,可滚动的形式显示条目的ViewGroup.Grid条目使用ListAdapter自动地被嵌入到页面中。

在本教程中,我们会构建一个grid形式的图片缩略图。当一个图片被选中后,toast信息会显示图片的位置(以数字的形式)。

1.建立一个工程命名为 HelloGridView.

2.找一些你想用的图片,或者直接在官网上下载样例图片,并且把它们都保存到工程的res/drawable/路径。

3.打开 res/layout/main.xml文件并且插入如下代码:

<? xmlversion = "1.0" encoding = "utf-8" ?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 

    android:id="@+id/gridview"

    android:layout_width="fill_parent" 

    android:layout_height="fill_parent"

    android:columnWidth="90dp"

    android:numColumns="auto_fit"

    android:verticalSpacing="10dp"

    android:horizontalSpacing="10dp"

    android:stretchMode="columnWidth"

    android:gravity="center"
/>



GridView会填满整个屏幕,属性很容易解释。


其实呢,我觉得,在将来,如果要进行相关的关于GridView的开发,到官网上将次段代码复制到xml文件里就好,通常来说,这代表了最普遍的用法。 4.打开HelloGridView.java,插入如下代码来完善onCreate()方法:
public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);     GridView gridview = (GridView) findViewById(R.id.gridview);     gridview.setAdapter(new ImageAdapter(this));     gridview.setOnItemClickListener(new OnItemClickListener() {         public void onItemClick(AdapterView<?> parent, View v, int position, long id) {             Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();         }     }); }
在main.xml布局设置好以后,就要设置内容,实例对象GridView通过findViewById(int)获得。然后使用setAdapter()方法来设置一个自定义适配器(ImageAdapter)(连接器,不知道用什么词语来说Adapter),作为所有将被显示的条目的源。ImageAdapter将在下一步定义。

当条目被点击的时候,需要发生一些事情,实现一些功能,所以setOnItemClickListener()方法被传给一个新的对象AdapterView.OnItemClickListener。这个匿名的实例定义了返回方法OnItemClick()使得弹出一个Toast来显示所选的条目的编号。用户还可以将装个编号用于显示全幅的图片。

5.创建一个新的ImageAdapter类来扩展BaseAdapter:

public class ImageAdapter extends BaseAdapter {

    private Context mContext;



    public ImageAdapter(Context c) {

        mContext = c;

    }



    public int getCount() {

        return mThumbIds.length;

    }



    public Object getItem(int position) {

        return null;

    }



    public long getItemId(int position) {

        return 0;

    }



    // create a new ImageView for each item referenced by the Adapter

    public View getView(int position, View convertView, ViewGroup parent) {

        ImageView imageView;

        if (convertView == null) {  // if it's not recycled, initialize some attributes

            imageView = new ImageView(mContext);

            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));

            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

            imageView.setPadding(8, 8, 8, 8);

        } else {

            imageView = (ImageView) convertView;

        }



        imageView.setImageResource(mThumbIds[position]);

        return imageView;

    }



    // references to our images

    private Integer[] mThumbIds = {

            R.drawable.sample_2, R.drawable.sample_3,

            R.drawable.sample_4, R.drawable.sample_5,

            R.drawable.sample_6, R.drawable.sample_7,

            R.drawable.sample_0, R.drawable.sample_1,

            R.drawable.sample_2, R.drawable.sample_3,

            R.drawable.sample_4, R.drawable.sample_5,

            R.drawable.sample_6, R.drawable.sample_7,

            R.drawable.sample_0, R.drawable.sample_1,

            R.drawable.sample_2, R.drawable.sample_3,

            R.drawable.sample_4, R.drawable.sample_5,

            R.drawable.sample_6, R.drawable.sample_7

    };
}



首先,它实现了BaseAdapter里面一些需要的方法。构造器getCount()用于内部。通常来说,getItem(int)应该返回适配器中特定位置的实际对象(物件),但是此例中不作讨论。同样,getItemId(int)应该返回条目的行id,在这里也补需要。



第一个必要的方法是getView()。此方法为每个添加到适配器中的图片创建一个新的View,当此方法被调用时,一个View就被传入,通常来说这个View是一个可循环利用的对象。因此这里有一个检查,看这个对象是不是空对象。如果是空的,那么一个ImageView就会被实例化,并且按照需要的属性进行配置。



1)setLayoutParams(ViewGroup.LayoutParams)设置图片的宽度和高度,这样就可以实现无论drawable中图片本身大小是多少,各张图片都被重新设置或者裁剪为新的显示大小。



2)setScaleType(ImageView.ScaleType),声明怎样进行裁剪。本例中是朝中心进行裁剪。



3)setPadding(int,int,int,int)定义每一边的填充。   //我在我自己的应用中将此行注释掉了



如果传递给getView()的View不是空值,那么本地的ImageView就使用循环的对象来进行初始化。



在getView()方法的最后,传给方法的位置数值用来从mThumbIds队列中选择图片。---mThumbIds是ImageView的图片集中地。所有的图片都是用来定义drawable资源中的mThumbIds队列。



6.运行应用。






  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
控件使用 1、鼠标经过行的时候改变该行的样式,鼠标离开行的时候恢复该行的样式 使用方法(设置属性): MouseOverCssClass - 鼠标经过行时行的 CSS 类名 2、对多个字段进行复合排序;升序、降序的排序状态提示 使用方法(设置SmartSorting复合属性): AllowSortTip - 是否启用排序提示 AllowMultiSorting - 是否启用复合排序 SortAscImageUrl - 升序提示图片的URL(不设置则使用默认图片) SortDescImageUrl - 降序提示图片的URL(不设置则使用默认图片) SortAscText - 升序提示文本 SortDescText - 降序提示文本 3、根据按钮的CommandName设置其客户端属性 使用方法(设置ClientButtons集合属性): BoundCommandName - 需要绑定的CommandName AttributeKey - 属性的名称 AttributeValue - 属性的值(两个占位符:{0} - CommandArgument;{1} - Text) Position - 属性的值的位置 4、联动复选框(复选框的全选和取消全选)。选中指定的父复选框,则设置指定的所有子复选框为选中状态;取消选中指定的父复选框,则设置指定的所有子复选框为取消选中状态。如果指定的所有子复选框为均选中状态,则设置指定的父复选框为选中状态;如果指定的所有子复选框至少有一个为取消选中状态,则设置指定的父复选框为取消选中状态 使用方法(设置CascadeCheckboxes集合属性): ParentCheckboxID - 模板列中 父复选框ID ChildCheckboxID - 模板列中 子复选框ID CashBox.Helper.WebGrid中的静态方法 List GetCheckedDataKey(GridView gv, int columnIndex) List GetCheckedDataKey(GridView gv, string checkboxId) 5、固定指定行、指定列,根据RowType固定行,根据RowState固定行 使用方法(设置FixRowColumn复合属性): FixRowType - 需要固定的行的RowType(用逗号“,”分隔) FixRowState - 需要固定的行的RowState(用逗号“,”分隔) FixRows - 需要固定的行的索引(用逗号“,”分隔) FixColumns - 需要固定的列的索引(用逗号“,”分隔) TableWidth - 表格的宽度 TableHeight - 表格的高度 6、响应行的单击事件和双击事件,并在服务端处理 使用方法(设置属性): BoundRowClickCommandName - 行的单击事件需要绑定的CommandName BoundRowDoubleClickCommandName - 行的双击事件需要绑定的CommandName 7、行的指定复选框选中的时候改变该行的样式,行的指定复选框取消选中的时候恢复该行的样式 使用方法(设置CheckedRowCssClass复合属性): CheckBoxID - 模板列中 数据行的复选框ID CssClass - 选中的行的 CSS 类名 8、导出数据源的数据为Excel、Word或Text(应保证数据源的类型为DataTable或DataSet) 使用方法: 为WebGrid添加的方法 Export(string fileName) Export(string fileName, ExportFormat exportFormat) Export(string fileName, ExportFormat exportFormat, Encoding encoding) Export(string fileName, int[] columnIndexList, ExportFormat exportFormat, Encoding encoding) Export(string fileName, int[] columnIndexList, string[] headers, ExportFormat exportFormat, Encoding encoding) Export(string fileName, string[] columnNameList, ExportFormat exportFormat, Encoding encoding) Export(string fileName, strin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值