经常有这样的需求,你的功能图标要像一个个物品,摆放在书架上,像这样:

我的思路比较简单,重载GridView,在他绘制子视图前,先把背景绘制完成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class RowGridView extends GridView {
    private static String NAMESPACE_ANDROID = "http://schemas.android.com/apk/res/android";
              
    private Bitmap rowBackground;
    private int rowBgHeight;
    private int columnNum;
              
    public RowGridView(Context context, AttributeSet attrs){
        super(context,attrs);
        //获得列数
        columnNum = attrs.getAttributeIntValue(NAMESPACE_ANDROID,"numColumns",3);
        //获取自定义属性
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.row_bg_grid_view);
        rowBgHeight = a.getDimensionPixelSize(R.styleable.row_bg_grid_view_row_bg_height,50);
        int row_bg_resource = a.getResourceId(R.styleable.row_bg_grid_view_row_background,-1);
        rowBackground = BitmapFactory.decodeResource(getResources(),row_bg_resource);
    }
              
    @Override
    protected void dispatchDraw(Canvas canvas){
        //行高
        int rHeight = getChildAt(0).getHeight();
        int width = getWidth();
        int rowNum = (int)Math.ceil(getChildCount()/(double)columnNum);
        //源绘制矩形
        Rect src = new Rect(0,0,rowBackground.getWidth(),rowBackground.getHeight());
        for(int i=0,y=rHeight-(rowBgHeight/2); i<rowNum; i++,y += rHeight){
            //目的绘制矩形
            Rect dst = new Rect(0,y,width,y+rowBgHeight);
            canvas.drawBitmap(rowBackground,src,dst,null);
        }
        super.dispatchDraw(canvas);
    }
}

上面第11行有这样一句

1
columnNum = attrs.getAttributeIntValue(NAMESPACE_ANDROID,"numColumns",3);

为什么不用getNumColumns?因为这个函数需要api level 11(即Android 3.0以上),而且有可能返回-1

两个自定义属性:背景和背景高度,在values/attrs.xml定义如下

1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="row_bg_grid_view">
        <attr name="row_background" format="reference"/>
        <attr name="row_bg_height" format="dimension" />
    </declare-styleable>
</resources>

最后使用的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:oa="http://schemas.android.com/apk/res/com.best.oa"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">
    <com.best.oa.common.base.RowGridView
            android:id="@+id/functions"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dip"
            android:layout_weight="1"
            android:numColumns="2"
            oa:row_background="@drawable/grid_row_bg"
            oa:row_bg_height="60dip"
            android:stretchMode="columnWidth">
    </com.best.oa.common.base.RowGridView>
</LinearLayout>

转载于:https://www.cnblogs.com/Free-Thinker/p/3685455.html

为Android GridView 设置行背景相关推荐

  1. 雷林鹏分享:jQuery EasyUI 数据网格 - 条件设置行背景颜色

    jQuery EasyUI 数据网格 - 条件设置行背景颜色 本教程将向您展示如何根据一些条件改变数据网格(datagrid)组件的行样式.当 listprice 值大于 50 时,我们将为该行设置不 ...

  2. html怎么设置数据条的颜色,jQuery EasyUI 数据网格 – 条件设置行背景颜色 | 菜鸟教程...

    jQuery EasyUI 数据网格 - 条件设置行背景颜色 本教程将向您展示如何根据一些条件改变数据网格(datagrid)组件的行样式.当 listprice 值大于 50 时,我们将为该行设置不 ...

  3. Android如何设置渐变色背景 渐变shape

    Android如何设置渐变色背景 Android开发过程中,会用到android:backgroud属性来设置背景的颜色,一般情况下我们直接设置一个类似#FFFF0000的值代表是背景颜色,如果想设置 ...

  4. android gridview 设置字体,我想为GridView设置字体

    我想为GridView的适配器TextView设置字体.我需要从资源文件夹访问字体.我想为GridView设置字体 TextView listitem = (TextView) findViewByI ...

  5. android自定义渐变色,Android如何设置渐变色背景 | 夕辞

    Android开发过程中,会用到android:backgroud属性来设置背景的颜色,一般情况下我们直接设置一个类似#FFFF0000的值代表是背景颜色,如果想设置渐变背景颜色,就需要用到gradi ...

  6. html设置行背景颜色

    <!DOCTYPE <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> ...

  7. Android Studio设置主题背景背景图片字体

    由于前两天刚刚安装了最新版的Studio,字体以及主题背景都需要重新设置,而自己也还是Studio使用小白,避免以后忘记,索性就随笔记下啦! 设置字体大小 习惯的原因,Studio的默认字体尺寸本主看 ...

  8. Android——动态设置view背景颜色setBackgroundColor

    setBackgroundColor 用于动态设置view背景颜色 今天写代码的时候遇到个小问题 动态设置的时候用Color.GRAY,系统自己带着的颜色,是没有问题的 但是用自己定义的颜色,就不生效 ...

  9. Android Studio 设置编辑器背景颜色

    介绍 设置背景色作用 AndroidStudio 合理设置编辑器背景颜色能使眼镜不容易疲劳,更好的保护眼镜. 推荐颜色 颜色在这里向大家推荐豆沙绿,保护眼睛的说法虽未得到任何科学证实,但是确实看着柔和 ...

  10. android gridview固定行数据,如何在Android gridview中为行设置不同的列

    我有类似的东西,我解决与新的RecyclerView. 我创建了一个片段与一个RecyclerView. xml上的RecyclerView: android:id="@+id/filter ...

最新文章

  1. Apache POI和EasyExcel 第七集:EasyExcel的基本操作,读取和写入Excel,一行足矣
  2. DIV CSS left right top bottom定位
  3. 产品经理能力模型 答网友问
  4. c语言 判断一个图是否全连通_C语言:程序运行流程图与顺序结构语句
  5. 一个应用被部署到SAP云平台后,启动时打印的日志
  6. 134. Gas Station加油站
  7. jsr303 spring_使用Spring和JSR 303进行方法参数验证
  8. JAVA 日期时间类使用方法
  9. python 员工考勤_用python写的考勤自动打卡程序
  10. 大咖说中台 | 中台不是“银弹”!
  11. 项目导入mysql驱动包---简单例子
  12. 11010011计算机二进制,二进制运算及转换(课件)
  13. 电脑上怎么批量压缩图片?如何快速批量压缩图片?
  14. 如何利用cmd打开资源管理器
  15. 为何要使用加密邮箱?
  16. 西瓜书-机器学习复习<HENU>
  17. neo4j-入门---学习复杂关系使用CQL语句操作图数据库(二)
  18. 基于springboot 支付宝app端支付,可用于uni-app使用
  19. PHP打印对象 用[]可以 用.不可以 不知所以然
  20. 【代码审计】那些代码审计的思路.md

热门文章

  1. InnoDB中Adaptive hash index存在问题、Percona改进及一个bug
  2. tomcat启动内存设置以及字符集设置
  3. 使用Ajax.dll前台调用后台方法及错误示例
  4. struts2的struts.xml的详细配置1-1
  5. Acer 4736ZG的Mac之旅
  6. wireshark学习使用
  7. cdn对动态网站有作用吗_cdn是什么和作用有些
  8. 能给别人吗_《奇葩说》观点引热议:一种能看透别人心思的能力,你敢要吗?...
  9. 学习Maven之Maven Surefire Plugin(JUnit篇)
  10. SpringMVC深入信息提示(四)