GridView 详解及拓展

android:verticalSpacing=”10dp”  //行宽
android:horizontalSpacing=”10dip”  //列宽
android:numColumns=”3″  //列数

android:stretchMode=”columnWidth”  //列可扩展

以上列数为3,若想在高分辨率中列数设置为4

首先,需要在属性中设置列为可扩展android:stretchMode=”columnWidth”。然后在代码中做个判断:

if(Metrics.heightPixels == 1280 && Metrics.widthPixels == 800){
gridview.setNumColumns(4);
}这样GridView的列数是可以随分辨率不同而做更多的设置。

stretchMode属性值的作用是设置GridView中的条目以什么缩放模式去填充空间。参数stretchMode 可选值:

  • NO_STRETCH,
  • STRETCH_SPACING,
  • STRETCH_SPACING_UNIFORM,
  • STRETCH_COLUMN_WIDTH

设置个边框,并且右上角设置个CheckBox来美化选中状态

    

边框:

ImageView 要设置一个属性:android:layout_margin=”4dip” //上下左右留出4dip的具体来显示边框的效果。

并且在相应的Adapter中做个判断,选中的话背景图片颜色为#87CEFA,未选中时为3FFFFFF:

if(bSelect){ //bSelect表示是否选中
arg1.setBackgroundColor(Color.parseColor(“#87CEFA”));
}else{
arg1.setBackgroundColor(Color.parseColor(“#FFFFFF”));}

Gridview 中 android:layout_margin=”10dp”

GridView中设置了Button以后就不能响应OnItemClick()

当我们在GridView或者ListView里面设置了Textiew的时候,假如我们不给Textiew设置onlick()的话,那么 Gridiew的OnItemClick()就是可以执行的,但是当把TextView换成是Button的时候我们也不设置onClick()的话,GridView的OnItemClick()也是不能执行的

说明Button和TextView内部事件方面有区别,去查看 Button的源代码,代码很少就这么几句
public class Button extends TextView {
public Button(Context context) {
this(context, null);
}

public Button(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.buttonStyle);
}

public Button(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
所以,主要的猫腻还是在com.android.internal.R.attr.buttonStyle这个里面,查看这个xml文件,Button设置多了两个属性如下:
<item name=”android:focusable”>true</item>
<item name=”android:clickable”>true</item>
所以我们要在代码里面把这两个属性设为false,这样就可以响应GridView的onItemClick方法了,因为button拦截了点击事件,你也可以试下给button设置监听器,button肯定可以得到点击事件。

GridView点击item不响应
gridView.setOnItemClickListener(new OnItemClickListener() {});
点击每一个item的时候没有反应,无法获取的焦点。原因多半是由于在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件(也可以说是Button或者Checkable的子类控件),此时这些子控件会将焦点获取到,所以常常当点击item时变化的是子控件,item本身的点击没有响应

该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。

属性的值有三种:

  • beforeDescendants:viewgroup优先其子类控件获取到焦点
  • afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
  • blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好了,至此listview点击的灵异事件告一段落。

本身 GridView就会监听到点击事件,当你点击LinearLayout的时候,点击事件会向下传递。要是不想让gridView相应点击事件,那就让LinearLayout拦截点击事件,不让事件向下传递,GridView本身就有点击每一个iten的默认事件,所以外层的LinearLayout点击效果无效,如果只对LinearLayout产生点击效果,LinearLayout需要设置属性Clickable=“true”

gridview 中按钮事件

给Button或ImageButton加上这个android:focusable=”false”属性
给GridView的每一个item的布局文件中的最外层的layout加上这个属性android:descendantFocusability=”blocksDescendants”

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

生活在西班牙

自己动手丰衣足食

BlueAsteroid

Just another WordPress.com site

Jing's Blog

Just another WordPress.com site

Start from here......

我的心情魔方

天才遠私廚

希望能做一個分享各種資訊的好地方

语义噪声

西瓜大丸子汤的博客

笑对人生,傲立寰宇

Just another WordPress.com site

Where On Earth Is Waldo?

A Project By Melanie Coles

the Serious Computer Vision Blog

A blog about computer vision and serious stuff

Cauthy's Blog

paper review...

Cornell Computer Vision Seminar Blog

Blog for CS 7670 - Special Topics in Computer Vision

datarazzi

Life through nerd-colored glasses

Luciana Haill

Brainwaves Augmenting Consciousness

槑烎

1,2,∞

Dr Paul Tennent

and the university of nottingham

turn off the lights, please

A bunch of random, thinned and stateless thoughts around the Web

%d bloggers like this: