Android 自定义九宫格控件Gridview用法以及属性

来源:互联网 发布:淘宝全屏海报显示不全 编辑:程序博客网 时间:2024/05/16 06:24

九宫格控件Gridview让人熟悉又陌生,它适配器跟listview差不多,常用都是继承baseAdapt 就能快速完成一个适配器,适配器里面的item也可以根据具体情况来写。那在本博客主要是了解Gridview基本属性,以及自定义Gridview与滚动条ScrollBar共存不冲突的情况、重写dispatchTouchEvent方法禁止GridView滑动。

一、Gridview基本属性

android:numColumns=”auto_fit”   //GridView的列数设置为自动
android:columnWidth=”90dp "       //每列的宽度,也就是Item的宽度
android:stretchMode=”columnWidth"//缩放与列宽大小同步
android:verticalSpacing=”10dp”          //两行之间的边距
android:horizontalSpacing=”10dp”      //两列之间的边距 
android:cacheColorHint="#00000000" //去除拖动时默认的黑色背景
android:listSelector="#00000000"        //去除选中时的黄色底色
android:scrollbars="none"                   //隐藏GridView的滚动条
android:fadeScrollbars="true"             //设置为true就可以实现滚动条的自动隐藏和显示
android:fastScrollEnabled="true"      //GridView出现快速滚动的按钮(至少滚动4页才会显示)
android:fadingEdge="none"                //GridView衰落(褪去)边缘颜色为空,缺省值是vertical。(可以理解为上下边缘的提示色)
android:fadingEdgeLength="10dip"   //定义的衰落(褪去)边缘的长度
android:stackFromBottom="true"       //设置为true时,你做好的列表就会显示你列表的最下面
android:transcriptMode="alwaysScroll" //当你动态添加数据时,列表将自动往下滚动最新的条目可以自动滚动到可视范围内
android:drawSelectorOnTop="false"  //点击某条记录不放,颜色会在记录的后面成为背景色,内容的文字可见(缺省为false)


二、自定义Gridview

重写了onMeasure,dispatchTouchEvent这两个方法。

import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.GridView;public class CustomGridView extends GridView { private boolean haveScrollbar = true;      public CustomGridView(Context context, AttributeSet attrs) {         super(context, attrs);     }     public CustomGridView(Context context) {         super(context);     }     public CustomGridView(Context context, AttributeSet attrs, int defStyle) {         super(context, attrs, defStyle);     }         /**       * 设置是否有ScrollBar与ScollView中同时显示时,应当设置为true。 默认为 true       *        * @param haveScrollbars       */      public void setHaveScrollbar(boolean haveScrollbar) {          this.haveScrollbar = haveScrollbar;      }        /**     * ScollView与ScrollBar共存     */    @Override      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {          if (haveScrollbar) {              int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);              super.onMeasure(widthMeasureSpec, expandSpec);          } else {              super.onMeasure(widthMeasureSpec, heightMeasureSpec);          }      }    //重写dispatchTouchEvent方法禁止GridView滑动    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        if(ev.getAction() == MotionEvent.ACTION_MOVE){            return true;        }        return super.dispatchTouchEvent(ev);    }}

因为一般使用Gridview控件都会自定义重写它的一些方法来达到UI的要求。这是一种较常见全面自定义重写方法来控制。至于Gridview适配器的跟listview继承baseAdapt一样。

0 0
原创粉丝点击