Android使用GridView实现表格分割线效果

使用GridView实现表格分割线效果,网格布局表格布局也是可以实现的,源码在此:点击下载  效果如下:

1.主函数代码:

package com.example.qd.douyinwu;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 自定义GridLayout 表格实现系列
 * <p>
 * https://github.com/li504799868/GridLayoutView
 * https://github.com/Eason90/GridBuilder
 * <p>
 * https://github.com/wimsonevel/AndroidGridLayout
 * <p>
 * https://blog.csdn.net/swust_chenpeng/article/details/37873215
 * tableLayout 实现类似gridview的效果 带分割线
 * <p>
 * <p>
 * https://github.com/LRH1993/AutoFlowLayout   网格布局实现
 * https://github.com/dolphinwang/GridLayout
 * https://blog.csdn.net/aminy123/article/details/69053339  频道管理
 */
public class SGridViewAcivity extends Activity {
  private View view = null;
  private GridView gridView;
  private List<Map<String, Object>> data_list;
  private SimpleAdapter sim_adapter;
  private Context mContext;
  // 图片封装为一个数组
  private int[] icon = {R.drawable.ic_launcher_background, R.drawable.ic_launcher_background,
      R.drawable.jz_backward_icon, R.drawable.jz_backward_icon, R.drawable.ic_launcher_background,
      R.drawable.jz_backward_icon, R.drawable.jz_backward_icon, R.drawable.ic_launcher_background,
      R.drawable.jz_backward_icon, R.drawable.ic_launcher_background, R.drawable.ic_launcher_background,
      R.drawable.jz_backward_icon};
  private String[] iconName = {"通讯录", "日历", "照相机", "时钟", "游戏", "短信", "铃声",
      "设置", "语音", "天气", "浏览器", "视频"};
  private String[] iconNames = {"", "篮球", "击剑", "保龄球", "排球","台球",
      "中国", "666", "688", "999", "888","988",
      "意大利", "122", "222", "112","388","321",
      "法国", "322", "200", "100", "210","188",
      "韩国", "101", "120", "142", "234", "532"};

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gv);

    gridView = (GridView) findViewById(R.id.gridView2);
//新建List
    data_list = new ArrayList<Map<String, Object>>();
    //获取数据
    getData();
    //新建适配器
    String[] from = {"image", "text"};
    int[] to = {R.id.image, R.id.text};
    gridView.setAdapter(new ImageAdapter(SGridViewAcivity.this));

//    sim_adapter = new SimpleAdapter(this, data_list, R.layout.item, from, to);
    //配置适配器
//    gridView.setAdapter(sim_adapter);

  }
  public List<Map<String, Object>> getData() {
    //cion和iconName的长度是相同的,这里任选其一都可以
    for (int i = 0; i < icon.length; i++) {
      Map<String, Object> map = new HashMap<String, Object>();
      map.put("image", icon[i]);
      map.put("text", iconName[i]);
      data_list.add(map);
    }

    return data_list;
  }

  // references to our images
  private Integer[] mThumbIds = {
      R.drawable.jz_backward_icon, R.drawable.jz_add_volume,
      R.drawable.jz_add_volume, R.drawable.jz_add_volume,
      R.drawable.jz_add_volume, R.drawable.jz_add_volume,
      R.drawable.jz_add_volume, R.drawable.jz_add_volume,
      R.drawable.jz_add_volume, R.drawable.jz_add_volume,
      R.drawable.jz_add_volume, R.drawable.jz_add_volume,
      R.drawable.jz_add_volume, R.drawable.jz_add_volume,
      R.drawable.jz_add_volume, R.drawable.jz_add_volume,
      R.drawable.jz_add_volume, R.drawable.jz_add_volume,
      R.drawable.jz_add_volume, R.drawable.jz_add_volume,
      R.drawable.jz_add_volume, R.drawable.jz_add_volume
  };

  private class ImageAdapter extends BaseAdapter {

    private Context mContext;

    public ImageAdapter(Context context) {
      this.mContext = context;
    }

    @Override
    public int getCount() {
      return iconNames.length;
    }

    @Override
    public Object getItem(int position) {
      return null;
    }

    @Override
    public long getItemId(int position) {
      return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      ViewHolder viewHolder = null;

      if (convertView == null) {
        convertView = LayoutInflater.from(mContext).inflate(R.layout.item, parent, false);
        viewHolder = new ViewHolder();
//        viewHolder.itemImg = (ImageView) convertView.findViewById(R.id.iv_head);
        viewHolder.mText = (TextView) convertView.findViewById(R.id.text);

        convertView.setTag(viewHolder);

      } else {
        viewHolder = (ViewHolder) convertView.getTag();
      }

      // 这里只是模拟,实际开发可能需要加载网络图片,可以使用ImageLoader这样的图片加载框架来异步加载图片
//      imageLoader.displayImage("drawable://" + mThumbIds[position], viewHolder.itemImg);

      viewHolder.mText.setText(iconNames[position]);

      return convertView;
    }

    class ViewHolder {
      ImageView itemImg;
      TextView mText;
    }
  }

}

2.主函数布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="@color/colorPrimary"
  android:orientation="vertical">
  <GridView
    android:id="@+id/gridView2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="30dp"
    android:background="#999"
    android:horizontalSpacing="1dp"
    android:verticalSpacing="1dp"
    android:padding="1dp"
    android:numColumns="6" />
</LinearLayout>

ListView设置分割线的话设置:

android:divider
android:dividerHeight

a、设置GridView背景色。

b、设置水平和竖直方向间隔:android:horizontalSpacing和android:verticalSpacing。

c、设置GridView的item的背景色及其选中后的颜色。

3.适配器布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:background="@drawable/gv_one_selector"
  >

  <TextView
    android:id="@+id/text"
    android:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="39dp"
    android:textSize="13sp"
    android:padding="0dp"
    android:text="TextView" />

</LinearLayout>

4.背景选择器gv_one_selector:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <!--点击背景选择器-->
  <item
    android:state_selected="true" >
    <shape android:shape="rectangle">
      <solid
        android:color="#CCCCCC"
        />
    </shape>
  </item>
  <item
    android:state_pressed="true" >
    <shape android:shape="rectangle">
      <solid
        android:color="#CCCCCC"
        />
    </shape>
  </item>
  <item>
    <shape android:shape="rectangle">
      <solid
        android:color="#FFFFFF"
        />
    </shape>
  </item>
</selector>

参考选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <!--表格分割线背景效果-->
  <item
    android:state_selected="true" >
    <shape android:shape="rectangle">
      <solid
        android:color="#CCCCCC"
        />
      <stroke android:width="1.0px" android:color="#999999" />
    </shape>
  </item>
  <item
    android:state_pressed="true" >
    <shape android:shape="rectangle">
      <solid
        android:color="#CCCCCC"
        />
      <stroke android:width="1.0px" android:color="#999999" />
    </shape>
  </item>
  <item>
    <shape android:shape="rectangle">
      <stroke android:width="1.0px" android:color="#999999" />
    </shape>
  </item>
</selector>

以上是全部代码。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2020-07-22

android shape的使用及渐变色、分割线、边框、半透明阴影

shape使用.渐变色.分割线.边框.半透明.半透明阴影效果. 首先简单了解一下shape中常见的属性.(详细介绍参看 api文档) <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape=["rectangle" | "

Android实现RecyclerView添加分割线的简便方法

1.前言 刚开始学习RecyclerView的时候我跟着一个视频学的,当时添加分割线是从外面导入一个Java类,然后使用里面的函数来创建分割线的,所以一直以来我都是这样做的.直到前几天才无意中发现,原来v7包中提供了一个DividerItemDecoration类,利用它,我们可以很简单地实现RecyclerView的分割线!那还等什么呢?赶紧用起来. 2.创建一个简单的RecyclerView 首先当然应该来一个RecyclerView,这里就不再赘述了,随便造点数据就好.直接上代码: pub

Android中控件GridView实现设置行列分割线的方法示例

前言 虽然Aandroid目前已经有RecyclerView了.非常强大的一个View.可以直接控制成ListView以及GridView等.而且画框线也比较方便.但是呢在很多情况下我们不得不仍然使用GridView来实现布局.那么在这个时候我们又要怎么来对GridViw进行画框线呢.下面将提供两种实现方式.大家可以选择一下 一.设置垂直.横向间距.通过GRIDVIEW和ITEM的背景色来实现 1.设置GridView背景色 2.设置水平和竖直方向间隔:android:horizontalSpa

android利用xml实现分割线

因为没有美工, 所以只能自己动手了. 在layout文件夹里的xml 写 方法1:在layout里面的布局xml 文件里加上面的代码 <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/orange_normal" /> 效果图 在drawable文件夹里用 shape line 或 recta

Android RecyclerView网格布局(支持多种分割线)详解(2)

上篇Android RecyclerView 详解(1)-线性布局 记录了下RecyclerView的使用方法,并且讲述了线性布局列表的使用方法,在此基础上加上了万能分割线,支持颜色分割线和图片分割线,同时支持对分割线设置线宽. 这篇是总结一下网格布局的使用,同样也支持两种分割线和线宽的设置. 主要的相关类: 1. RecyclerView.Adapter 2. GridLayoutManager 网格布局管理器 3. RecycleView.ItemDecoration 分割线 下面就直接通过

Android RecyclerView实现水平、垂直方向分割线

android RecyclerView不像过去的ListView那样随意的设置水平方向的分割线,如果要实现RecyclerView的水平/垂直分割线,则需要继承自RecyclerView.ItemDecoration重写getItemOffsets方法,从而增加水平/垂直分割线. 写一个例子. MainActivity.Java: package zhangphil.app; import android.content.Context; import android.graphics.Col

详解Android中ListView实现图文并列并且自定义分割线(完善仿微信APP)

昨天的(今天凌晨)的博文<Android中Fragment和ViewPager那点事儿>中,我们通过使用Fragment和ViewPager模仿实现了微信的布局框架.今天我们来通过使用ListView实现其中联系人一栏的基本视图,效果如下: 要实现上图的效果,我们要用到两个知识点: 1.这里我们使用自定义适配实现图文列表(当然也可以用SimpleAdapter) 通过继承BaseAdapter(抽象类)自定义适配器可以实现更灵活更复杂的列表. 自定义适配器ListView的优化: (1)使用固

Android自定义DataGridView数据表格控件

我是一个.net程序员,但是苦于公司要求开发一个android app,没办法,只能硬着头皮上了. 由于项目里面很多地方需要用到数据显示控件(类似于.net的DataGridView),度娘找了下发现没人公开类似的控件,没办法只好自己写了. 废话不多说,直接贴代码: public class DataGridView extends HorizontalScrollView { private List<DataGridViewColumn> columns; private List<

android中RecyclerView自定义分割线实现

最近一直在看RecyclerView,较之ListView它确实是灵活多变,给予开发者更多自定义的空间,比如:需要添加头部和尾部.item的点击事件.自定义的LayoutManager,还有就是下面要说的自定义的分割线. 1.如何理解分割线 经常听到有人说自定义分割线麻烦,为什么不把分割线写到item布局里,这样不是更简单吗?有些情况把分割线写到item布局里是很难达到我们想要的效果,例如RecyclerView里的GridLayoutManager,StaggeredGridLayoutMan

Android修改DatePicker字体颜色及分割线颜色详细介绍

一.DatePicker和TimePicker简介 DatePicker是一个日期选择控件,它继承自FrameLayout类,用来实现的主要功能是使用护可以方便选择日期.如果要捕获用户修改DataPicker控件中的数据改变事件,需要为DatePicker添加OnDateChangedListener监听器. TimePicker是一个时间选择控件,也继承自FrameLayout类.时间选择控件向用户显示一天中的时间(可以为24小时,也可以为AM/PM制),并允许用户进行选择.如果要捕获用户修改

Android 使用jarsigner给apk签名的方法详细介绍

Android 使用jarsigner给apk签名的方法详细介绍 工作中APP功能完成以后往往需要往应用商店提交一些内容,如商店中存在本公司别的人员提交的APP,往往需要进行认领,应用商店会让开发者下载空的APK,然后使用自己APP的签名文件进行签名,认证,这里简单说一下如何使用jarsigner命令进行签名. 该arsigner命令在jdk中可以找到, 简单说明一下具体参数: -verbose:签名命令标识符. -keystore:后面跟着的是你签名使用的密钥文件(keystore)的绝对路径

Android 开发音频组件(Vitamio FAQ)详细介绍

 一.Vitamio介绍 1.1 Vitamio是什么? Vitamio是Android平台视音频播放组件,支持播放几乎格式的视频以及主流网络视频流(http/rtsp/mms等),详细的中文介绍: 这里. Vitamio官网:http://vitamio.org/ Vitamio微博:http://weibo.com/vitamio VPlayer官网:http://vplayer.net Vitamio豆瓣:http://site.douban.com/145815/ 1.2 关于Vitam

Android Init进程对信号的处理流程详细介绍

Android  Init进程对信号的处理流程 在Android中,当一个进程退出(exit())时,会向它的父进程发送一个SIGCHLD信号.父进程收到该信号后,会释放分配给该子进程的系统资源:并且父进程需要调用wait()或waitpid()等待子进程结束.如果父进程没有做这种处理,且父进程初始化时也没有调用signal(SIGCHLD, SIG_IGN)来显示忽略对SIGCHLD的处理,这时子进程将一直保持当前的退出状态,不会完全退出.这样的子进程不能被调度,所做的只是在进程列表中占据一个

Android 中NumberPicker,DatePicker与DatePickerDialog中分割颜色的修改实例代码

Android 中NumberPicker,DatePicker与DatePickerDialog中分割颜色的修改实例代码 前言: 开发中,为了应用整体美观,需要保持控件的色调和主题色保持一致, 例如:NumberPicker.DatePicker和DatePickerDialog的分割线颜色 一.NumberPicker的分割线颜色 我把对NumberPicker分割线颜色的方法写在一个工具类中,便于全局调用,代码如下: public static void setNumberPickerDi

Android 实现不同字体颜色的TextView实现代码

Android 实现不同字体颜色的TextView 遇到的需求,mark一下. 实现代码: package com.chuck.recyclerviewdemo; import android.content.Context; import android.graphics.Canvas; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.style.Foreg

Android开发改变字体颜色方法

在TextView中添加文本时有时会改变一些文本字体的颜色,今天主要分享三种实现方法及相关优缺点. 1.通过html标签改变文本颜色 复制代码 代码如下: tv.setText(Html.fromHtml("我是<font color=blue>danyijiangnan</font>")); 点评:通过Html.fromHtml()方法就可以在字符串中使用html的标签,通过font标签可以改变字体的格式.麦子学院-国内最专业的IT在线教育平台. 2.在act

修改Android FloatingActionButton的title的文字颜色及背景颜色实例详解

修改Android FloatingActionButton的title的文字颜色及背景颜色实例详解 首先看一张图片 我是在一个不错的开源的FloatingActionButton库基础上实现的,链接github开源库 参考图片的标记和代码里的注释.代码如下: <com.getbase.floatingactionbutton.FloatingActionsMenu android:id="@+id/fab_meau" android:layout_width="wra

Android 沉浸式改变小米魅族状态栏颜色的实例代码

这个是基于SystemBarTintManager更改的 增加一个方法:用于更改MIUIV6系统上的状态栏字体颜色 ,目前我仅仅只发现MIUIV6上可以更改,在android5.0上以及其它4.4以上系统没有发现可以更改字体颜色的代码 核心代码: public void setStatusBarDarkMode(boolean darkmode, Activity activity) { if (sIsMiuiV6) { Class<? extends Window> clazz = acti

Android实现状态栏和虚拟按键背景颜色的变化实例代码详解

今天介绍一下,我在项目开发过程中,实现状态栏和虚拟按键背景颜色变化的方法,实现方式是,通过隐藏系统的状态栏和虚拟按键的背景,实现图片和背景显示到状态栏和虚拟按键下方.下面来看实现代码: 实现状态栏背景的设置 状态栏工具类 public class StatusBarUtil { /** * 设置沉浸式状态栏 * * @param activity 需要设置的activity */ public static void setTransparent(Activity activity) { //A