普通的做法是设置一个高度,然后里面能显示出来几行就是几行,如果里面的内容高度变了,就需要重新调整高度来适配。

观察了一下它的onMeasure

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { ..... if (heightMode == MeasureSpec.AT_MOST) {
    int ourSize =  mListPadding.top + mListPadding.bottom;
   
    final int numColumns = mNumColumns;
    for (int i = ; i < count; i += numColumns) {
        ourSize += childHeight;
        if (i + numColumns < count) {
            ourSize += mVerticalSpacing;
        }
        if (ourSize >= heightSize) {
            ourSize = heightSize;
            break;
        }
    }
    heightSize = ourSize;
}
... }

发现,如果是它设置wrap_content,可以通过改变它的adapter来确定行数,具体方法如下是:

MyAdapter

@Override
    public int getCount() {
        if (mIsOnMeasure && super.getCount() >MAX_COUNT) {
            return MAX_COUNT;
        }
        return super.getCount();
    }     public void setOnMeasureStatus(boolean isOnMeasure) {
        mIsOnMeasure = isOnMeasure;
    } Gridview- > @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        if (heightMode == MeasureSpec.AT_MOST) {
            ((MyAdapter) getAdapter()).setOnMeasureStatus(true);
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            int height = getMeasuredHeight();
            ((FolderAdapter) getAdapter()).setOnMeasureStatus(false);
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            setMeasuredDimension(getMeasuredWidthAndState(),
                    MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
        } else {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }

在onMeasure的时候,先让adapter假装有行数×列数的内容,调用 super.onMeasure先算出一个高,这个就是期望高度。

然后在调用一次  super.onMeasure(widthMeasureSpec, heightMeasureSpec),把整个view绘制出来
最后通过setMeasuredDimension就可以做到了。

Android GridView设置行数的更多相关文章

  1. 为Android GridView 设置行背景

    经常有这样的需求,你的功能图标要像一个个物品,摆放在书架上,像这样: 我的思路比较简单,重载GridView,在他绘制子视图前,先把背景绘制完成 1 2 3 4 5 6 7 8 9 10 11 12 ...

  2. Android GridView 指定行数,动态行宽,占满空间

    有时间我们需要 使用GridViw 让它占满父控件,例: 特别是在适配的时间比较麻烦,在不同的机型上可能分出下,下面空的太多,或有滚动条问题,; 下面说一下实现思路: 首先,设置GridView 为三 ...

  3. 在linux中使用Sqlplus命令登录MySQL,查看表并设置行数和宽度,使其正常显示

    在linux中使用sqlplus命令进入MySQL,设置行数和行宽   1) 查看目前的pagesize,默认是14: 1.      show pagesize;    2.      set pa ...

  4. Android:TextView最小行数设置

    我们有时候为了保证TextView必须有一个最小的高度,那么就需要设置这个行数. 因为如果你不设置的话,在measure这个TextView的时候,此时就无法准确的得到一个最小高度.因为设备不同,所以 ...

  5. Android Studio显示行数

    Android Studio在打开的文件左側单击鼠标右键,也能像Eclipse一样设置显示代码行数,如图1.可是这边跟Eclipse有一个非常大的差别,Eclipse设置后,其余的相应文件也跟着生效, ...

  6. Android Studio代码行数统计插件Statistics

    Android Studio 是没有提提供统计代码全部行数的功能的,但是对于开发者来说,这个功能确实必备的,Statistic统计代码行数非常方便,也很详细. 1,首先肯定是将插件下载下来,下载地址: ...

  7. android ScrollView 控制行数

    利用ScrollView 来控制textView 显示的行数 <ScrollView android:layout_width="fill_parent" android:l ...

  8. Android Studio设置行宽、格式化断行

    设置基于Android studio 1.2,其它版本可能位置不大一样,可以直接搜索 1.设置行宽 就是那条右标准线的位置:Setting-->Editor-->Code Style,右侧 ...

  9. Android Studio 统计行数

    开发中常常会想看看自己累积在这个项目中写了多少代码了,以下就是在Android Studio查看统计项目代码总行数的方法. 打开Android Studio,按快捷键Ctrl+Shift+A 输入fi ...

随机推荐

  1. 【Python】子域名查询脚本

    脚本学习,多写写就会啦,来一发个人编写的超级无敌low的子域名查询脚本 #coding:utf-8 import re import requests import urllib import url ...

  2. JS之作用域与闭包

    JS之作用域与闭包   作用域在JS中同样也是一个重要的概念.它不复杂,因为ES5中只有全局作用域和函数作用域,我们都知道他没有块级作用域.但在ES6中多了一个let,他可以保证外层块不受内层块的影响 ...

  3. Python批量修改文件名(os库)

    问题: 在某一文件夹内有97个sql文件,全部都以统一格式命名,例如“A201222-广州李小龙纪念协会-1-广州李小龙纪念协会-2018.AUD” 由于有两段重复了,而且中间的“1”也没有意义,需要 ...

  4. C# 直接创建一个DataTable,并为之添加数据(自定义DataTable) 转

    DataTable dt=new DataTable("cart"); DataColumn dc1=new DataColumn("prizename",Ty ...

  5. 那些H5用到的技术(2)——音频和视频播放

    前言audio标签Web Audio API自动播放的问题背景音乐的实现立即播放的问题SoundJSvideo标签播放样式的问题格式的问题总结 前言 正常情况,除了非常简陋的小功能H5,音乐播放是必不 ...

  6. goLang冒泡

    // test project main.gopackage main import (    "fmt") func main() {    var a = [10]int{1, ...

  7. Java线程池——ThreadPoolExecutor的使用

    1 线程池的创建 ThreadPoolExecutor有以下四个构造方法 ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long  ...

  8. iostat命令——监控系统设备的IO负载情况

    iostat命令的安装 #yum install sysstat iostat常见选项 -t   输出数据时打印搜集数据的时间 -m  输出的数据以MB为单位 -d  显示磁盘的统计信息 # iost ...

  9. 【HTML基础】表格和表单

    本次博客的主要内容如下: meta和link 表格 表单 meta和link meta meta的属性有两种:name和http-equiv. name属性主要用于描述网页内容,对应与网页内容. 1. ...

  10. 【JSON.parse()和JSON.stringify()】

    var str = '{"name":"huangxiaojian","age":"23"}' 结果: JSON.par ...