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

九宫格控件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一样。

你可能感兴趣的:(Android,UI设计)