4.2 android:scrollbars
android:layout_height="wrap_content" android:minHeight="50dp" android:background="@android:drawable/editbox_background" android:scrollbars="vertical" android:maxLines="4">
5、遗留问题
5.1 以下几个属性翻遍了资料试了很多次都没有效果,只能暂时搁置,以后补上,也欢迎的大家提供意见和线索,分享大家的经验:
android:scrollbarAlwaysDrawHorizontalTrack
android:scrollbarAlwaysDrawVerticalTrack
android:isScrollContainer
六、 ImagesView
2、结构
java.lang.Object
↳ android.view.View
↳ android.widget.ImageView
已知直接子类:
ImageButton, QuickContactBadge
已知间接子类:
ZoomButton
2、 类概述
显示任意图像,例如图标。 ImageView类可以加载各种来源的图片(如资源或图片库),需要计算图像的尺寸,比便它可以在其他布局中使用,并提供例如缩放和着色(渲染)各种显示选项。
3、 XML属性
属性名称
描述
android:adjustViewBounds
是否保持宽高比。需要与 maxWidth、 MaxHeight一起使用,否则单独使用没有效果。
android:cropToPadding
是否截取指定区域用空白代替。单独设置无效果,需要与 scrollY一起使用,效果如下,实现代码见代码部分:
android:maxHeight
设置 View的最大高度,单独使用无效,需要与 setAdjustViewBounds一起使用。如果想设置图片固定大小,又想保持图片宽高比,需要如下设置:
1) 设置 setAdjustViewBounds为 true;
2) 设置 maxWidth、 MaxHeight;
3) 设置设置 layout_width和 layout_height为 wrap_content。
android:maxWidth
设置 View的最大宽度。同上。
android:scaleType
设置图片的填充方式。
matrix
0
用矩阵来绘图
fitXY
1
拉伸图片(不按比例)以填充 View的宽高
layout_
height
:30px
layout_
width
:120px
fitStart
2
按比例拉伸图片,拉伸后图片的高度为 View的高度,且显示在 View的左边
fitCenter
3
按比例拉伸图片,拉伸后图片的高度为 View的高度,且显示在 View的中间
fitEnd
4
按比例拉伸图片,拉伸后图片的高度为 View的高度,且显示在 View的右边
center
5
按原图大小显示图片,但图片宽高大于 View的宽高时,截图图片中间部分显示
layout_
height
:60px
layout_
width
:80px
padding
:10px
centerCrop
6
按比例放大原图直至等于某边 View的宽高显示。
centerInside
7
当原图宽高或等于 View的宽高时,按原图大小居中显示;反之将原图缩放至 View的宽高居中显示。
android:src
设置 View的 drawable(如图片,也可以是颜色,但是需要指定 View的大小 )
android:tint
将图片渲染成指定的颜色。见下图:
左边为原图,右边为设置后的效果,见后面代码。
4、代码
4.1 android:tint
android:layout_width="wrap_content" android:layout_height="wrap_content"> android:layout_width="wrap_content" android:layout_height="wrap_content">
4.2 android:cropToPadding
android:layout_width="wrap_content" android:layout_height="wrap_content"> android:layout_width="wrap_content" android:layout_height="wrap_content"> android:layout_width="wrap_content" android:layout_height="wrap_content"> android:layout_width="wrap_content" android:layout_height="wrap_content">
七、 ImageButton
1、结构
java.lang.Object ↳ android.view.View ↳ android.widget.ImageView ↳ android.widget.ImageButton
已知直接子类:
ZoomButton
2、类摘要
显示一个可以被用户点击的图片按钮,默认情况下, ImageButton看起来像一个普通的按钮,在不同状态(如按下)下改变背景颜色。按钮的图片可用通过 XML元素的 android:src属性或 setImageResource(int)方法指定。
要删除按钮的背景,可以定义自己的背景图片或设置背景为透明。(注:请看
原图 和图片按钮 ,默认图片周围有按钮的背景,选中之后为黄色)
为了表示不同的按钮状态(焦点,选择等),你可以为各种状态定义不同的图片。例如,定义蓝色图片为默认图片,黄色图片为获取时焦点时显示的图片,黄色图片为按钮被按下时显示的图片。一个简单的方法可以做到这点——通过 XML的 "selector."配置,如下:
保存上面的 XML到 res/drawable/ 文件夹下( 注: 注意文件名大小写!),将该文件名作为一个参数设置到 ImageButton的 android:src属性(注:如 xml文件名为 myselector.xml,那么这里设置为 "@drawable/myselector",设置 android:background也是可以的,但效果不太一样)。 Android根据按钮的状态改变会自动的去 XML中查找相应的图片以显示。
元素的顺序很重要,因为是根据这个顺序判断是否适用于当前按钮状态,这也是为什么正常(默认)状态指定的图片放在最后,是因为它只会在 pressed和 focused都判断失败之后才会被采用。(注:例如按钮被按下时是同时获得焦点的,但是获得焦点并不一定按了按钮,所以这里会按顺序查找,找到合适的就不往下找了。这里按钮被点击了,那么第一个将被选中,且不再在后面查找其他状态。)
参见 Form Stuff tutorial 。
3、 继承自父类的方法
public void setAlpha (int alpha)
设置 ImageButton图片的透明度(注意不是背景图片的)。效果如图:
参数
alpha 透明值 0~255, 0为完全透明, 255为完全不透明
八、 QuickContactBadge
1、结构
java.lang.Object ↳ android.view.View ↳ android.widget.ImageView ↳ android.widget.QuickContactBadge
2、截图
说明: 在 andorid自带的 ApiDomos的例子中有这个的代码: App/Activity/QuickContacktsDemo。注意需要 android.permission.READ_CONTACTS权限,并且联系人里面有数据,并且联系人需要有手机号码,不然出来是一个空的(看代码可知)。
3、公共方法
public void assignContactFromEmail (String emailAddress, boolean lazyLookup)
指定联系人的电子邮箱地址。(注:它会先搜索这个号码,如果没有会提醒你是否添加到联系人,参见 文章1 )
参数
emailAddress 联系人的电子邮箱地址
lazyLookup 如果设置为 true,将不会立即查找这个邮箱地址,直到 View被点击时。(注:是否延迟匹配电子邮件)
public void assignContactFromPhone (String phoneNumber, boolean lazyLookup)
为联系人指定一个电话号码。(注:参见 文章1 )
参数
phoneNumber 联系人的电话号码
lazyLookup 如果设置为 true,将不会立即查找这个电话号码,直到 View被点击时。
public void assignContactUri (Uri contactUri)
指定和 QuickContactBadge关联的联系人 URI。注意,这里只是显示 QuickContact窗口,并不为你绑定联系人图片。
参数
contactUri CONTENT_URI或 CONTENT_LOOKUP_URI其中一种风格的 URI.
public void onClick (View v)
当 View被点击时调用。
参数
v 被点击的 View.
public void setExcludeMimes (String[] excludeMimes)
设置一组要排除不显示的 MIMI类型列表。例如,可以隐藏 Contacts.CONTENT_ITEM_TYPE类型的图标。(注:如果像如下设置:
setExcludeMimes(new String[] { Contacts.CONTENT_ITEM_TYPE })
即隐藏了上面截图的第二个,仅显示电话和短信两个图标)
public void setMode (int size)
设置 QuickContact的窗口模式。如下选项: MODE_SMALL、 MODE_MEDIUM、 MODE_LARGE。(注:默认为 QuickContact.MODE_MEDIUM,设置为 MODE_LARGE时会同时显示联系人名称)
九、 ZoomButton
1、类结构
java.lang.Object
↳ android.view.View
↳ android.widget.ImageView
↳ android.widget.ImageButton
↳ android.widget.ZoomButton
public class ZoomButton extends ImageButton implements View.OnLongClickListener
2、概述
缩放按钮,实际上是很普通的两个按钮,可以简单的理解为一个 ImageButton加上一张缩放的图标。如下代码:
3、公共方法
public boolean dispatchUnhandledMove (View focused, int direction)
对于获得焦点的 View,这个方法是捕获箭头事件最后的机会。这就是在获取焦点的 View没有在内部处理、系统在要求的方向也不能找到一个新的 View让其获得焦点时调用。
参数
focused 当前焦点 View
direction焦点移动的方向。其中之一 :FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT和 FOCUS_RIGHT.
返回值
如果为 true,将清除这个 View未处理的事件。
(注:从源码中可看出 ZoomButton覆盖了父类的该方法,在 super之前调用了一下 clearFocus,如下代码:
public boolean onKeyUp (int keyCode, KeyEvent event)
默认实现至 KeyEvent.Callback.onKeyMultiple() :当点击执行时 KEYCODE_DPAD_CENTER 或 KEYCODE_ENTER被释放。
参数
keyCode 按下按钮代表的键值,属于 KeyEvent (注: KeyEvent的静态属性 )。
event 该KeyEvent对象,定义按钮动作
返回值
如果您处理这一事件中,返回true。 如果你想允许事件被下一个接收器处理,返回false。
public boolean onLongClick (View v)
当一个 View被长按时调用。
参数
v 被长按的 View。
返回值
如果返回 true,这个回调在长按时被执行了,反之返回 false.
public boolean onTouchEvent (MotionEvent event)
实现这个方法处理触摸屏移动事件。
参数
event 该移动事件 .
返回值
如果是 true,该事件是触摸,反之返回 false。
public void setEnabled (boolean enabled)
设置这个 View启用状态。
参数
enabled 设置 true表示启用,反之表示禁用。
public void setZoomSpeed (long speed)
(注:单独使用无实际意义,可以用来存放临时数据)
十、 CheckBox
1、类结构
public class CheckBox extends CompoundButton
java.lang.Object
↳ android.view.View
↳ android.widget.TextView
↳ android.widget.Button
↳ android.widget.CompoundButton
↳ android.widget.CheckBox
2、 概述
复选框是一种有双状态按钮的特殊类型,可以选中或者不选中。如下是一个在 activity中使用复选框的例子:
十一、 RadioButton
1、结构
public class RadioButton extends CompoundButton java.lang.Object ↳ android.view.View ↳ android.widget.TextView ↳ android.widget.Button ↳ android.widget.CompoundButton ↳ android.widget.RadioButton
2、概述
单选按钮是一种双状态的按钮,可以选择或不选中。在单选按钮没有被选中时,用户能够按下或点击来选中它。但是,与复选框相反,用户一旦选中就不能够取消选中(译者注:可以通过代码来控制,界面上点击的效果是一旦选中之后就不能取消选中了)。
多个单选按钮通常与 RadioGroup同时使用。当一个单选组( RadioGroup)包含几个单选按钮时,选中其中一个的同时将取消其它选中的单选按钮。(译者注:示例参见 这里 )
3、公共方法
public void toggle ()
将单选按钮更改为与当前选中状态相反的状态。
如果这个单选按钮已经选中,这个方法将不切换单选按钮。(译者注:请看源码:
十二、 Button
1、结构
public class Button extends TextView java.lang.Object ↳ android.view.View ↳ android.widget.TextView ↳ android.widget.Button
已知直接子类 CompoundButton 已知间接子类 CheckBox , RadioButton , ToggleButton
2、概述
代表一个按钮部件。用户通过按下按钮,或者点击按钮来执行一个动作。以下是一个按钮在 activity中典型的应用:
然后,你能在 xml布局中通过 button的 android:onClick属性指定一个方法,以替代在 activity中为 button设置 OnClickListener。例如:
现在,当用户点击按钮时, Android系统调用 activity的 selfDestruct(View)方法。为了正确执行,这个方法必须是 public并且仅接受一个 View类型的参数。例如:
3、按钮样式
每个按钮的样式默认为系统按钮的背景 ,不同的设备、不同的平台版本有不同按钮风格。如你不满意默认的按钮样式,想对其定制以符合您应用程序的设计,那么你能用 state list drawable 替换按钮的背景图片。一个状态列表 drawable是一个在 XML中定义的 drawable资源,根据当前按钮的状态改变其图片。一旦你在 XML中定义了一个状态列表 drawable,你可以将它应用于你的 android:background属性。欲了解更多信息和示例,参见 State List Drawable .
实现一个按钮的例子可参见 Form Stuff tutorial
4、 XML属性
参见 Button、 TextView、 View的 XML属性。
十三、 ToggleButton
1、结构
public class ToggleButton extends CompoundButton
java.lang.Object
↳ android.view.View
↳ android.widget.TextView
↳ android.widget.Button
↳ android.widget.CompoundButton
↳ android.widget.ToggleButton
2、 类概述
通过一个带有亮度指示同时默认文本为“ ON”或“ OFF”的按钮显示选中 /未选中状态。
3、 XML属性
属性名称
描述
android:disabledAlpha
设置按钮在禁用时透明度。
android:textOff
未选中时按钮的文本
android:textOn
选中时按钮的文本
4、公共方法
public CharSequence getTextOff ()
返回按钮未选中时的文本。
返回值
文本
public CharSequence getTextOn ()
返回按钮选中时的文本。
返回值
文本
public void setBackgroundDrawable (Drawable d)
设置指定的可绘制(译者注:如图片)为背景,或删除背景。如果让背景有边距,这个视图的边距就是背景的边距。然而,当背景被删除时,这个视图的边距不能被触摸。如果需要设置边距,请使用方法 setPadding(int, int, int, int)。
(译者注:如果设置删除背景整个就不显示了,此外设置背景后选中和被选中的图片也不显示了,如下图: ,实现代码:
)
参数
d 设置可绘制(译者注:如图片)为背景,或设置为空删除背景。
public void setChecked (boolean checked)
改变按钮的选中状态。
参数
checked true让按钮选中, false让按钮不选中
public void setTextOff (CharSequence textOff)
设置按钮未选中时显示的文本。
参数
textOff 文本
public void setTextOn (CharSequence textOn)
设置按钮选中时显示的文本。
参数
textOn 文本
5、受保护方法
protected void drawableStateChanged ()
在视图状态的变化影响到所显示可绘制的状态时调用这个方法。
确保在覆盖时中调用父类方法(译者注: super. drawableStateChanged ())。
protected void onFinishInflate ()
XML文件加载视图完成时调用。这个函数在加载的最后阶段被调用,所有的子视图已经被添加。
即使子类重写了 onFinishInflate方法,也应该始终确保调用父类方法(译者注: super. onFinishInflate()),使系统能够调用。
十四、 ViewStub
1、结构
public final class ViewStub extends View
java.lang.Object
↳ android.view.View
↳ android.view.ViewStub
2、类概述
ViewStub 是一个隐藏的,不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件。当 ViewStub可见,或者调用 inflate()函数时,才会加载这个布局资源文件。 该 ViewStub在加载视图时在父容器中替换它本身。因此, ViewStub会一直存在于视图中,直到调用 setVisibility(int) 或者 inflate()为止。 ViewStub的布局参数会随着加载的视图数一同被添加到 ViewStub父容器。同样,你也可以通过使用 inflatedId属性来定义或重命名要加载的视图对象的 Id值。例如 :
通过 "stud"id可以找到被定义的 ViewStub对象。加载布局资源文件 "mySubTree "后, ViewStub对象从其父容器中移除。可以通过 id"subTree"找到由布局资源 "mySubTree"创建的 View。这个视图对象最后被指定为宽 120dip,高 40dip。执行加载布局资源文件的推荐方式如下:
当 inflate()被调用 , 这个 ViewStub被加载的视图替代并且返回这个视图对象。这使得应用程序不需要额外执行 findViewById()来获取加载视图的引用。 (译者注:这个类大概意思是用 ViewStub类和在 XML文件里面指定的布局资源文件关联起来,让布局资源文件在需要使用的时候再加载上去。主要作用是性能优化,什么时候用什么时候加载,不用在开始启动的时候一次加载 ,既可以加快程序的启动速度,又可以节省内存资源。)
3、嵌套类
接口 ViewStub.OnInflateListener 一个用于接收 ViewStub已经成功加载布局资源文件的通知的监听器。
4、 XML属性
属性名称
相关方法
描述
android:inflatedId
setInflatedId(int)
覆盖待加载视图的 id值。
android:layout
setLayoutResource(int)
为待加载的资源视图提供一个标识,在 ViewStub变为可见或获取焦点时使用它。(译者注:要引用的布局资源文件 id)
5、构造函数
ViewStub(Context context, int layoutResource)
创建一个与指定的布局资源文件关联的 ViewStub对象。
参数
layoutResource 要加载的布局资源文件的 id 值。
6、公共方法
public void draw (Canvas canvas)
手动在指定的画布绘制这个视图 (及所有其子视图 )。这个视图必须在调用这个函数之前做好了整体布局。当要自己实现一个视图时,不要重载这个方法;相反,你应该重载 onDraw(Canvas)方法。(译者注: 主要用于自定义的视图组件的方法。 )
参数
canvas 这个画布传到那个已渲染的视图对象。
public int getInflatedId ()
返回加载的布局资源文件的 ID,如果加载的布局资源文件的 id是 NO_ID,那么这个加载的 View将保留它原来的 id值。
相关 XML 属性
android:inflatedId
返回值
一个正整数来标识这个要加载的视图或者 NO_ID将保持加载视图原来的 id。
参见
setInflatedId(int)
public int getLayoutResource ()
返回加载的布局资源文件的 id值。
相关 XML 属性
android:layout
返回值
加载到视图对象的布局资源文件 id值。
参见
setLayoutResource(int)
setVisibility(int)
inflate()
public View inflate ()
加载 getLayoutResource()方法标识的布局资源,并通过加载布局资源替换父容器中它自己。
返回值
这个已加载的布局资源文件 .
public void setInflatedId (int inflatedId)
设置加载视图的 ID。如果这个 id为 NO_ID,这个加载视图保持它原来的 id不变。
相关 XML 属性
android:inflatedId
参数
inflatedId 一个正整数来标识这个加载视图或者 NO_ID将保持加载视图原来的 id。
参见
getInflatedId()
public void setLayoutResource (int layoutResource)
设置待加载的布局资源文件,当 ViewStub被设置为 visible或 invisible或调用 inflate()时使用。这个在加载布局资源文件时创建的视图用来在父容器中替换它自己。
相关 XML 属性
android:layout
参数
layoutResource 一个有效的布局资源文件 id值(不等于 0)。
参见
getLayoutResource()
setVisibility(int)
inflate()
public void setOnInflateListener (ViewStub.OnInflateListener inflateListener)
设置成功加载布局资源文件后事件通知的监听器。
参数
inflateListener 该 OnInflateListener在成功加载后得到事件通知。
参见
ViewStub.OnInflateListener
public void setVisibility (int visibility)
当可见性设置为 VISIBLE或 INVISIBLE, inflate()将被调用,并且加载视图资源在父容器中替换 ViewStub。
参数
visibility 设置为 VISIBLE(显示) , INVISIBLE(隐藏) , 或 GONE(完全隐藏,不暂用布局位置) .
参见
inflate()
7、受保护方法
protected void dispatchDraw (Canvas canvas)
调用这个函数去绘制这个控件的子视图。可以通过派生类重写在绘制子类之前获取控制(但是是在他自己的视图已经被绘制完之后)
参数
canvas 这个画布传到那个已渲染的视图对象。
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
测量这个视图以确定其内容的高度和宽度。通过 measure(int, int)来调用这个方法,并且应该由子类重写以提高内容测量的效率和精确度。
约定:当该方法被重写时,你必须调用 setMeasuredDimension(int, int)来存储已测量视图的高度和宽度。否则将通过 measure(int, int)抛出一个 IllegalStateException异常。调用父类的 onMeasure(int, int)方法是一个有效的办法。
父类的实现是以背景大小为默认大小,除非 MeasureSpec(测量细则)允许更大的背景。为了更好测量内容子类应该重写 onMeasure(int, int)。
如果这个方法被重写,子类有责任确保测量它的高度和宽度至少是视图的最小宽度和高度( getSuggestedMinimumHeight()和 getSuggestedMinimumWidth())。
参数
widthMeasureSpec 由于父类有横向空间要求,参见 View.MeasureSpec。
heightMeasureSpec 由于父类有纵向空间要求,参见 View.MeasureSpec 。
十五、 GridView
1、结构
public final class GridView extends AbsListView
java.lang.Object ↳ android.view.View ↳ android.view.ViewGroup ↳ android.widget.AdapterView ↳ android.widget.AbsListView ↳ android.widget.GridView
2、类概述
一个在平面上可显示多个条目的可滚动的视图组件,该组件中的条目通过一个 ListAdapter和该组件进行关联。比如 android手机中显示的应用:
比如实现九宫格图,用 GridView是首选,也是最简单的。
3、构造函数
public GridView (Context context) 创建一个默认属性的 GridView实例
public GridView (Context context, AttributeSet attrs)
创建一个带有 attrs属性的 GridView实例
public GridView (Context context, AttributeSet attrs, int defStyle)
创建一个带有 attrs属性,并且指定其默认样式的 GridView实例
4、 XML属性
属性名称
描述
android:columnWidth
设置列的宽度。关联的方法为: setColumnWidth(int)
android:gravity
设置此组件中的内容在组件中的位置。可选的值有: top、 bottom、 left、 right、 center_vertical、 fill_vertical、 center_horizontal、 fill_horizontal、 center、 fill、 clip_vertical 可以多选,用“ |”分开。关联方法: setGravity (int gravity)
android:horizontalSpacing
两列之间的间距。关联方法: setHorizontalSpacing(int)
android:numColumns
列数。关联方法: setNumColumns(int)
android:stretchMode
缩放模式。关联方法: setStretchMode(int)
android:verticalSpacing
两行之间的间距。关联方法: setVerticalSpacing(int)
5、公共方法
public ListAdapter getAdapter ()
获得与此组件相关的适配器 ..
返回值
ListAdapter适配器实例
public int getStretchMode ()
获得 GridView的缩放模式 ..
public boolean onKeyDown (int keyCode, KeyEvent event)
默认由 KeyEvent.Callback.onKeyMultiple()实现,如果视图是可用的并且是可点击的,那么传入 KEYCODE_DPAD_CENTER或 KEYCODE_ENTER值是执行的是按下视图操作。
参数
keyCode 一个表示按下操作的键值 .
event 表示按钮事件的对象 .
返回值
如果你认为已经完成事件处理 ,不想让让下一个处理器来处理此事件,则返回 true,否则返回 false。
public boolean onKeyMultiple (int keyCode, int repeatCount, KeyEvent event)
默认由 KeyEvent.Callback.onKeyMultiple()实现,总是返回 false(不处理此事件)。
参数
keyCode 键值 .
repeatCount 该动作发生的次数 .
event 事件对象 .
返回值
如果你认为已经完成事件处理 ,不想让让下一个处理器来处理此事件,则返回 true,否则返回 false。
public boolean onKeyUp (int keyCode, KeyEvent event)
默认由 KeyEvent.Callback.onKeyMultiple()实现,如果视图是可用的并且是可点击的,那么传入 KEYCODE_DPAD_CENTER或 KEYCODE_ENTER值是执行的是点击视图操作。
参数
keyCode 键值 .
event 事件对象 .
返回值
如果你认为已经完成事件处理 ,不想让让下一个处理器来处理此事件,则返回 true,否则返回 false。
public void setAdapter (ListAdapter adapter)
设置 GridView的数据。
参数
adapter 为 grid提供数据的适配器
public void setColumnWidth (int columnWidth)
设置 GridView的列宽 .
参数
columnWidth 列的宽度,以像素为单位
public void setGravity (int gravity)
设置控件内容的位置,默认值为: Gravity.LEFT.
参数
gravity 位置值
public void setHorizontalSpacing (int horizontalSpacing)
设置列间距 .
参数
horizontalSpacing 列间距值
public void setNumColumns (int numColumns)
设置 grid的列数
参数
numColumns 列数值 .
public void setSelection (int position)
设置选中的条目 .
参数
position . 数据条目在列表中的索引值(从 0开始),如果在可触摸的模式下,在该索引值下的条目将不会被选中,但是该索引值仍然指向该条目。
public void setStretchMode (int stretchMode)
设置 grid中的条目以什么缩放模式去填充空间。 .
参数
stretchMode 可选值: NO_STRETCH, STRETCH_SPACING, STRETCH_SPACING_UNIFORM,或 STRETCH_COLUMN_WIDTH
public void setVerticalSpacing (int verticalSpacing)
设置行间距 .
参数
verticalSpacing 间距值,以像素为单位
6、代码示例
下面给出一个小例子 , 先看效果:
a). GridView01.java
public class GridView01 extends Activity { private GridView gridview; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.gridview); //准备要添加的数据条目 List> items = new ArrayList>(); for (int i = 0; i < 10; i++) { Map item = new HashMap(); item.put("imageItem", R.drawable.icon); item.put("textItem", "text" + i); items.add(item); } //实例化一个适配器 SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.grid_item, new String[]{"imageItem", "textItem"}, new int[]{R.id.image_item, R.id.text_item}); //获得 GridView实例 gridview = (GridView)findViewById(R.id.mygridview); //gridview.setNumColumns(3);//可以在 xml中设置 //gridview.setGravity(Gravity.CENTER);//同上 //将 GridView和数据适配器关联 gridview.setAdapter(adapter); } }
b). gridview.xml
android:layout_width="wrap_content" android:layout_height="wrap_content"> android:numColumns="3" android:gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content">
c). grid_item.xml
android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> android:layout_width="wrap_content" android:layout_height="wrap_content"> android:layout_below="@+id/image_item" android:layout_height="wrap_content" android:layout_width="wrap_content">
参考资料:
农民伯伯: http://over140.cnblogs.com/