一、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;
}
}
// 省略其他代码
}
 
 

android gridview几个重要属性(android:listSelector自带内部padding分析)的更多相关文章

  1. LinearLayout属性android:orientation

    Android布局LinearLayout注意设置属性android:orientation属性,否则有的组件可能无法显示. 该属性不设置时默认为horizontal.此时第一个控件的宽度若设置成“f ...

  2. Android GridView属性集合

    GridView的一些特殊属性: 1.android:numColumns=”auto_fit”   //GridView的列数设置为自动 2.android:columnWidth=”90dp &q ...

  3. Android中GridView的一些特殊属性

    GridView的一些特殊属性: 1.android:numColumns="auto_fit"   //GridView的列数设置为自动 2.android:columnWidt ...

  4. 【Android 界面效果26】listview android:cacheColorHint,android:listSelector属性作用

    ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景图片,或者背景颜色时,滚动时listView会黑掉, 原因是,滚动时,列表里面的view重绘时,用的依 ...

  5. android gridview画分割线

    dongyangzhang android gridview画分割线,如图: 1.先上图: 2.具体实现代码: public class LineGridView extends GridView { ...

  6. Android ListView 几个重要属性

    Android ListView 几个重要属性http://blog.csdn.net/avenleft/article/details/7334060 android:transcriptMode= ...

  7. Android GridView 通过seletor 设置状态和默认状态

    Android中可以通过selector控制GridView Item 的状态,而省去使用代码控制 GridView View Selector Xml文件 <?xml version=&quo ...

  8. android ListView 九大重要属性详细分析、

    android ListView 九大重要属性详细分析. 1.android ListView 一些重要属性详解,兄弟朋友可以参考一下. 首先是stackFromBottom属性,这只该属性之后你做好 ...

  9. 【转】android ListView 几个重要属性

    android ListView 几个重要属性 分类: Android2012-03-08 19:25 19324人阅读 评论(5) 收藏 举报 listviewandroid活动javalistnu ...

随机推荐

  1. 关于STM32-MDK中preprocessor symbols解释

    preprocessor symbols 是预处理符号的意思,这里相当于宏定义,我们在使用STM32固件库时,由于固件库里面包含的是ST整个系列单片机的定义,如下图 这时在define框中可以作为一个 ...

  2. MySql与Oracle的区别总结

    在平时工作中使用这两个数据库的时候要多一些,这两数据库的使用方面存在的一些各自不同的地方,许多面试官也会问这两个的区别.所以,凭着自己的一些经验个感触,来说说这二者的区别. 使用的群众:MySql中小 ...

  3. 使用vim在Linux下编写C语言程序

    1.进入字符界面 2.创建文件夹用于存放源文件 mkdir helloworld    //创建文件夹命令 cd helloworld        //进入新建的文件夹,这里应该说目录比较好,win ...

  4. 【TypeScript】如何在TypeScript中使用async/await,让你的代码更像C#。

    [TypeScript]如何在TypeScript中使用async/await,让你的代码更像C#. async/await 提到这个东西,大家应该都很熟悉.最出名的可能就是C#中的,但也有其它语言也 ...

  5. 团队项目——站立会议DAY10

    第十次站立会议记录: 参会人员:张靖颜,钟灵毓秀,何玥,赵莹,王梓萱 项目进展: 1.张靖颜:进一步完善程序代码,提出扩展性的建议,增加程序的功能. 2.钟灵毓秀:修改已完成代码出现的bug,完善代码 ...

  6. [.net 面向对象编程基础] (10) 类的成员(字段、属性、方法)

    [.net 面向对象编程基础] (10) 类的成员(字段.属性.方法) 前面定义的Person的类,里面的成员包括:字段.属性.方法.事件等,此外,前面说的嵌套类也是类的成员. a.类的成员为分:静态 ...

  7. as3commons-bytecode 获取所有类的一个BUG

    下载了这个swc,号称可以反射出所有加载的类.已经用在了spring. 可是一运行就报错,说bytearray.uncompress出错.操. 下载整个源码,单独加载as3commons-byteco ...

  8. swagger:The World's Most Popular Framework for APIs.

    swagger官网:http://swagger.io/ swagger ui demo:http://petstore.swagger.io 让API文档总是与API定义同步更新,是一件非常有价值的 ...

  9. cocoapods 更新

    sudo gem update --system sudo gem install cocoapods pod setup pod --version

  10. Java连接Oracle数据库开发银行管理系统【三、实现篇】

    说明:里面的主要代码都加的有注释部分,所以代码显得很长,如果有错误的地方,谢谢指出. 注意需要导入数据库jar包 ------------------------------------------- ...