一、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. C++混合编程之idlcpp教程Python篇(9)

    上一篇在这 C++混合编程之idlcpp教程Python篇(8) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相比,工程PythonTutorial7中除了四个文件PythonTu ...

  2. [leetcode 37]sudoku solver

    1 题目: 根据给出的数独,全部填出来 2 思路: 为了做出来,我自己人工做了一遍题目给的数独.思路是看要填的数字横.竖.子是否已经有1-9的数字,有就剔除一个,最后剩下一个的话,就填上.一遍一遍的循 ...

  3. 使用C#开发ActiveX控件(新)

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  4. [后端人员耍前端系列]AngularJs篇:使用AngularJs打造一个简易权限系统

    一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJS来打造一个简易的权限管理系统.下面不多 ...

  5. 【WEB】Tomcat基础使用知识

    由于当前项目性质原因,从开始到现在使用的WEB服务器都是WAS,而Tomcat的基础知识也慢慢地被遗忘.由于种种原因,让我参与到了另外一个全新的项目,使用的是Tomcat6.X,所以复习是必须的,而写 ...

  6. FusionCharts简单教程(三)-----如何自定义图表上的工具提示

    最近有蛮多人总是问我这个FusionCharts制表的问题,帮助他们解决之后,在昨晚发现以前整理的笔记中有这个简单教程,而且以前也发表了几篇这个博文,所以就将其全部上传上来供别人参考.如有不正确之处望 ...

  7. 虚拟化平台cloudstack(2)——安装(上)

    vmware workstation安装ubuntu server12.04 这个其实没什么说的了,下软件,安装,一顿下一步,OK. 安装完成后,为ubuntu server 12.04安装桌面. 使 ...

  8. 实战使用Axure设计App,使用WebStorm开发(4) – 实现页面UI

    系列文章 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求  实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目   实战使 ...

  9. redis系列-主从复制

    redis自身提供了主从的机制,通过配置可以实现服务的备份(Master->Slave). 配置项 slaveof <masterip> <masterport> mas ...

  10. SQL-truncate && delete && drop 的区别

    有些人在删除表的所有记录的时候,喜欢这样来——不给DELETE 语句提供WHERE 子句,表中的所有记录都将被删除.但这种方法是不可取的,正确的应该使用 TRUNCATE TABLE tb_name ...