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>

以上是全部代码。

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

(0)

相关推荐

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

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

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

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

  • 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自定义DataGridView数据表格控件

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

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

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

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

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

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

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

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

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

  • 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自定义分割线实现

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

随机推荐