android gridview几个重要属性

一、android:scrollbarStyle  决定状态条的位置

    常用属性outsideOverlay,滚动条在最外层,gridview设置的padding在滚动条的内侧

二、android:stretchMode  决定怎么分配剩余的空间

spacingWidth

除去griditem和gridview的左右padding,剩余的空间totalSpace用中间的空余空间去扩充,这里的中间的分割空间总数n = columns - 1,这n个空间平分totalSpace

spacingWidthUniform

除去griditem和gridview的左右padding,剩余的空间totalSpace用n= columns + 1个空间去平分。与spacingWidth的区别就是分割空间多了两个,就是Gridview左右两边分别有一个,而且还不包括padding。

columnWidth

除去gridview的左右padding和horizontalspacing,用列的宽度去填满剩余空间,就是把剩余的空间平均分给每列的宽度。

三、android:listSelector   设置每个Item的按下效果,这个属性有点坑,具体如下解释

很多时候我们都会自定义gridview的每个Item的布局,点击效果也会使用自己的,不使用系统的。正常情况下如果自定义item比每个Gridview内部的item的要小,那么我们按下gridview的item时会响应系统的那个按下效果,但是如果我们自定义的item和gridview的item一样大,而且设置了点击事件,这个时候就点不中系统的按下效果了。 那么问题来了,本来视觉上没什么问题,但是我们发现gridview的两边多了一些padding(这里即使设置了gridview的padding,这个padding也会累加),原来发现系统默认的listSelctor自带有一个padding,这个padding会累加到gridview的padding上去。

解决上面问题的办法,自己设置一个listSelector去把系统的替换了。接下来看下这个listSelector怎么影响那个padding的。

1. 系统方法AbsListView的setSelector中设置了一个变量mSelectionRightPadding 

public void setSelector(Drawable sel) {
    if (mSelector != null) {
        mSelector.setCallback(null);
        unscheduleDrawable(mSelector);
    }
    mSelector = sel;
    Rect padding = new Rect();
    sel.getPadding(padding);
    mSelectionLeftPadding = padding.left;
    mSelectionTopPadding = padding.top;
    mSelectionRightPadding = padding.right;
    mSelectionBottomPadding = padding.bottom;
    sel.setCallback(this);
    updateSelectorState();
}

2. AbsListView的onMeasure中改变了mListPading的值,这里真是fuck么,搞一个临时变量来改值,搞不懂要闹那样。

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    if (mSelector == null) {
        useDefaultSelector();
    }
    final Rect listPadding = mListPadding;
    listPadding.left = mSelectionLeftPadding + mPaddingLeft;
    listPadding.top = mSelectionTopPadding + mPaddingTop;
    listPadding.right = mSelectionRightPadding + mPaddingRight;
    listPadding.bottom = mSelectionBottomPadding + mPaddingBottom;

// 省略其他代码

}

3. GridView的makeRow方法中把mListPading累加了

 

private View makeRow(int startPos, int y, boolean flow) {
    final int columnWidth = mColumnWidth;
    final int horizontalSpacing = mHorizontalSpacing;

final boolean isLayoutRtl = isLayoutRtl();

int last;
    int nextLeft;

    
if (isLayoutRtl) {
        nextLeft = getWidth() - mListPadding.right - columnWidth -
        ((mStretchMode == STRETCH_SPACING_UNIFORM) ? horizontalSpacing : 0);
    } else {
        nextLeft = mListPadding.left +
        ((mStretchMode == STRETCH_SPACING_UNIFORM) ? horizontalSpacing : 0);
    }  // 这里累加了,顺便可以看到spacingWidthUniform熟悉的作用

if (!mStackFromBottom) {
        last = Math.min(startPos + mNumColumns, mItemCount);
    } else {
        last = startPos + 1;
        startPos = Math.max(0, startPos - mNumColumns + 1);

if (last - startPos < mNumColumns) {
            final int deltaLeft = (mNumColumns - (last - startPos)) * (columnWidth +                                        horizontalSpacing);
            nextLeft += (isLayoutRtl ? -1 : +1) * deltaLeft;
        }
    }

// 省略其他代码

}

时间: 2024-08-06 15:18:49

android gridview几个重要属性的相关文章

Android GridView属性意义集合(转)

GridView的一些特殊属性: 1.android:numColumns=”auto_fit”   //GridView的列数设置为自动 2.android:columnWidth=”90dp "       //每列的宽度,也就是Item的宽度 3.android:stretchMode=”columnWidth"//缩放与列宽大小同步 4.android:verticalSpacing=”10dp”          //两行之间的边距 5.android:horizontalS

Android GridView 属性

1 <GridView android:id="@+id/grid" 2 android:layout_width="fill_parent" 3 android:layout_height="fill_parent" 4 android:verticalSpacing="35px" <!-- grid元素之间的竖直间隔 --> 5 android:horizontalSpacing="5px&qu

Android GridView属性集合

GridView的一些特殊属性: 1.android:numColumns=”auto_fit” //GridView的列数设置为自动 2.android:columnWidth=”90dp " //每列的宽度,也就是Item的宽度 3.android:stretchMode=”columnWidth"//缩放与列宽大小同步 4.android:verticalSpacing=”10dp” //两行之间的边距 5.android:horizontalSpacing=”10dp” //两

android gridview 属性集合

GridView的一些特殊属性: 1.android:numColumns="auto_fit"   //GridView的列数设置为自动 2.android:columnWidth="90dp "       //每列的宽度,也就是Item的宽度 3.android:stretchMode="columnWidth"//缩放与列宽大小同步 4.android:verticalSpacing="10dp"          /

Android GridView属性集合2

GridView的一些特殊属性: 1.android:numColumns=”auto_fit”   //GridView的列数设置为自动 2.android:columnWidth=”90dp "       //每列的宽度,也就是Item的宽度 3.android:stretchMode=”columnWidth"//缩放与列宽大小同步 4.android:verticalSpacing=”10dp”          //两行之间的边距 5.android:horizontalS

Android GridView中Button点击事件onItemClick不能响应

今天在捣鼓一个类似于百度贴吧的东西.布局:上面是个ActionBar标题栏,然后是一个GridView布局,在Java代码中动态加载关注的贴吧,一切就绪中,很愉快的弄好了! 现在需要点击选项进入某个贴吧,那么问题来了—— GridView中Button点击事件onItemClick不能响应. 所以,主要的猫腻还是在com.android.internal.R.attr.buttonStyle这个里面,查看这个xml文件,Button设置多了两个属性如下:<item name="androi

android gridview画分割线

dongyangzhang android gridview画分割线,如图: 1.先上图: 2.具体实现代码: public class LineGridView extends GridView { public LineGridView(Context context) { super(context); // TODO Auto-generated constructor stub } public LineGridView(Context context, AttributeSet at

Android GridView

GridView网格视图 GridView网格视图是按照行,列分布的方式来显示多个组件,通常用于显示图片或是图标等,在使用网格视图时,首先需要要在屏幕上添加GridView组件. 常用属性: 1. android:columnWidth 用于设置列的宽度 2. android:gravity 用于设置对齐方式 3. android:horizontalSpacing 用于设置各元素之间的水平间距 4. android:numColumns 用于设置列数 5. android:stretchMod

GridView的一些常用属性:

GridView的一些常用属性: android:numColumns=”auto_fit” //GridView的列数设置为自动 android:columnWidth=”90dp " //每列的宽度,也就是Item的宽度 android:stretchMode=”columnWidth" //缩放与列宽大小同步 android:verticalSpacing=”10dp” //两行之间的边距 android:horizontalSpacing=”10dp” //两列之间的边距 an