效果图:

    

代码如下:

MyGridView.java

  1. /**
  2. * 自定义GridView 解决在scrollview中只显示第一行数据的问题
  3. * Created by Spring on 2015/11/28.
  4. */
  5. public class MyGridView extends GridView {
  6. public MyGridView(Context context) {
  7. super(context);
  8. }
  9.  
  10. public MyGridView(Context context, AttributeSet attrs) {
  11. super(context, attrs);
  12. }
  13.  
  14. public MyGridView(Context context, AttributeSet attrs, int defStyle) {
  15. super(context, attrs, defStyle);
  16. }
  17.  
  18. /**
  19. * 这两个参数指明控件可获得的空间以及关于这个空间描述的元数据.
  20. * @param widthMeasureSpec 此控件获得的宽度
  21. * @param heightMeasureSpec 此控件获得的高度
  22. */
  23. @Override
  24. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  25. /**
  26. * >> 表示右移 ,如:int i=15; i>>2的结果是3,移出的部分将被抛弃。
  27. *转为二进制的形式可能更好理解,0000 1111(15)右移2位的结果是0000 0011(3),0001 1010(18)右移3位的结果是0000 0011(3)。
  28. *
  29. * 最大模式(MeasureSpec.AT_MOST)
  30. 这个也就是父组件,能够给出的最大的空间,当前组件的长或宽最大只能为这么大,当然也可以比这个小。
  31.  
  32. MeasureSpec.AT_MOST是最大尺寸,当控件的layout_width或layout_height指定为WRAP_CONTENT时,
  33. 控件大小一般随着控件的子空间或内容进行变化,此时控件尺寸只要不超过父控件允许的最大尺寸即可。
  34. 因此,此时的mode是AT_MOST,size给出了父控件允许的最大尺寸。
  35.  
  36. static int makeMeasureSpec(int size,int mode):根据提供的大小值和模式创建一个测量值(格式)
  37. */
  38. int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2 ,MeasureSpec.AT_MOST);
  39. super.onMeasure(widthMeasureSpec, expandSpec);
  40.  
  41. }
  42. }
  1. MyGridViewAdapter.java
  1. /**
  2. * 自定义Adapter
  3. * Created by Spring on 2015/11/28.
  4. */
  5. public class MyGridViewAdapter extends BaseAdapter {
  6. private Context context;
  7. //12星座图片
  8. private int [] imgs = {R.drawable.baiyang,R.drawable.jinniu,R.drawable.shuangzi,
  9. R.drawable.juxie,R.drawable.shizi,R.drawable.chunv,R.drawable.tiancheng,
  10. R.drawable.tianxie,R.drawable.sheshou,R.drawable.mojie,R.drawable.shuipin,
  11. R.drawable.shuangyu
  12. };
  13.  
  14. //12星座文字
  15. private String [] strs = {"白羊座","金牛座","双子座","巨蟹座","狮子座",
  16. "处女座","天秤座","天蝎座","射手座","摩羯座","水瓶座","双鱼座",
  17. };
  18.  
  19. public MyGridViewAdapter(Context context) {
  20. super();
  21. this.context = context;
  22. }
  23.  
  24. @Override
  25. public int getCount() {
  26. return imgs.length;
  27. }
  28.  
  29. @Override
  30. public Object getItem(int position) {
  31. return position;
  32. }
  33.  
  34. @Override
  35. public long getItemId(int position) {
  36. return position;
  37. }
  38.  
  39. @Override
  40. public View getView(int position, View convertView, ViewGroup parent) {
  41. ViewHolder holder;
  42. if (convertView == null){
  43. convertView = LayoutInflater.from(context).inflate(R.layout.main_item,parent,false);
  44. holder = new ViewHolder();
  45. holder.imageView = (ImageView)convertView.findViewById(R.id.item_img);
  46. holder.textView = (TextView)convertView.findViewById(R.id.item_txt);
  47. convertView.setTag(holder);
  48. }else {
  49. holder = (ViewHolder)convertView.getTag();
  50. }
  51. holder.imageView.setBackgroundResource(imgs[position]);
  52. holder.textView.setText(strs[position]);
  53.  
  54. return convertView;
  55. }
  56. class ViewHolder{
  57. ImageView imageView;
  58. TextView textView;
  59. }
  60. }
  1. MainActivity.java
  1. public class MainActivity extends AtySupport {
  2. private final String TAG = "TAG";
  3. private MyGridView gridView;
  4.  
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. requestWindowFeature(Window.FEATURE_NO_TITLE);
  9. setContentView(R.layout.activity_main);
  10. gridView = (MyGridView)this.findViewById(R.id.main_gridview);
  11.  
  12. gridView.setAdapter(new MyGridViewAdapter(this));
  13.  
  14. }
  15.  
  16. }

activity_main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical">
  6.  
  7. <RelativeLayout
  8. android:layout_width="match_parent"
  9. android:layout_height="50dp"
  10. android:background="@color/title">
  11. <ImageView
  12. android:layout_width="wrap_content"
  13. android:layout_height="30dp"
  14. android:layout_centerInParent="true"
  15. android:background="@drawable/xuanzhexingzuo"/>
  16.  
  17. </RelativeLayout>
  18. <!-- fillViewport = true 可以解决android布局不能撑满全屏的问题-->
  19. <ScrollView
  20. android:layout_width="match_parent"
  21. android:layout_height="wrap_content"
  22. android:fillViewport="true"
  23. android:scrollbars="none">
  24.  
  25. <custom.MyGridView
  26. android:id="@+id/main_gridview"
  27. android:layout_width="match_parent"
  28. android:layout_height="wrap_content"
  29. android:horizontalSpacing="0.0dip"
  30. android:listSelector="@null"
  31. android:numColumns="3"
  32. android:scrollbars="none"
  33. android:stretchMode="columnWidth"
  34. android:verticalSpacing="0.0dip">
  35.  
  36. </custom.MyGridView>
  37.  
  38. </ScrollView>
  39.  
  40. </LinearLayout>

main_item.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical" android:layout_width="match_parent"
  4. android:layout_height="match_parent">
  5.  
  6. <LinearLayout
  7. android:layout_width="match_parent"
  8. android:layout_height="match_parent"
  9. android:orientation="vertical"
  10. android:padding="12dp"
  11. android:layout_gravity="center"
  12. android:background="@drawable/bg_gridview_item">
  13.  
  14. <ImageView
  15. android:id="@+id/item_img"
  16. android:layout_width="58dp"
  17. android:layout_height="58dp"
  18. android:layout_gravity="center_horizontal"
  19. />
  20. <TextView
  21. android:id="@+id/item_txt"
  22. android:layout_width="wrap_content"
  23. android:layout_height="wrap_content"
  24. android:layout_marginTop="2dp"
  25. android:textSize="14sp"
  26. android:layout_gravity="center_horizontal"/>
  27. </LinearLayout>
  28. </LinearLayout>

项目资源还未上传(PS:我还没写好呢- -),有不懂的欢迎来询问~!

android之GridView实现九宫格布局的更多相关文章

  1. Android中用GridView实现九宫格的两种方法(转)

    Android中用GridView实现九宫格的两种方法http://blog.csdn.net/shakespeare001/article/details/7768455 1.传统办法:实现一个继承 ...

  2. Android UI编程(1)——九宫格(GridView)

    (转自:http://blog.csdn.net/Thanksgining/article/details/42968847) 参考博客:http://blog.csdn.net/xyz_lmn/ar ...

  3. Android开发 ---基本UI组件8:九宫格布局、setOnItemClickListener()项被选中监听事件

    效果图: 1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding="utf-8"?> ...

  4. Android Studio gridview 控件使用自定义Adapter, 九宫格items自适应全屏显示

    先看效果图,类似于支付宝首页的效果.由于九宫格显示的帖子网上已经很多,但是像这样九宫格全屏显示的例子还不是太多.本实例的需求是九宫格全屏显示,每个子view的高度是根据全屏高度三等分之后自适应高度,每 ...

  5. 安卓 九宫格 GridView 的表格布局

    首先,请大家理解一下“迭代显示”这个概念,这个好比布局嵌套,我们在一个大布局里面重复的放入一些布局相同的小布局,那些重复的部分是由图片和文字组成的小控件,图片在上方,文字在下方,之后我们只需要把这些小 ...

  6. Android中GridView的使用——使用自带的SimpleAdapter(简单适配器)

    GridView一直是一个系统登录后以九宫格方式展现功能子模块的最佳选择,经过试验和网上资料的查阅,现把实现方式总结一下: 一直是通过自定义Adapter方式,在getView()方法中设置图片的显示 ...

  7. Android中GridView通过自定义适配器(未优化)实现图文视图排列

    Android中GridView组件用来以网格方式排列视图,与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要显示时,可以使用该组件.下面我们通过代码实现如下图例(为了方便截图,将事件处理(土 ...

  8. Android中GridView拖拽的效果【android进化三十六】

      最 近看到联想,摩托罗拉等,手机launcher中有个效果,进入mainmenu后,里面的应用程序的图标可以拖来拖去,所以我也参照网上给的代码,写了 一个例子.还是很有趣的,实现的流畅度没有人家的 ...

  9. Android中GridView拖拽的效果

    最 近看到联想,摩托罗拉等,手机launcher中有个效果,进入mainmenu后,里面的应用程序的图标可以拖来拖去,所以我也参照网上给的代码,写了 一个例子.还是很有趣的,实现的流畅度没有人家的那么 ...

随机推荐

  1. php中抽象类和接口的特点、区别和选择

    一.特点: 1.抽象类特点 (1) 用 abstract 来修饰一个类,那么这个类就是抽象类:抽象类绝对不能被实例化,即$abc = new 抽象类名();会报错. (2) 用abstract 来修饰 ...

  2. Delphi-LowerCase 函数

    函数名称 LowerCase 所在单元 System.SysUtils 函数原型 function LowerCase(const S: string): string; 函数功能 将字符串中所有的大 ...

  3. 使用Intellij IDEA构建spark开发环境

    近期开始研究学习spark,开发环境有多种,由于习惯使用STS的maven项目,但是按照许多资料的方法尝试以后并没有成功,也可能是我环境问题:也可以是用scala中自带的eclipse,但是不太习惯, ...

  4. 嵌入式学习笔记(虚拟机共享文件夹配置-Ubuntu系统中)

    最近在学习Linux的操作系统,使用的是虚拟机.由于一些文件需要在主机和虚拟机中都要编辑,如果可以使得文件共享,可以极大的提高工作效率! 配置共享文件的步骤如下: [第一步] 在虚拟机软件中设置 [第 ...

  5. Erget 显示对象

    核心显示类: 类 描述 DisplayObject 显示对象基类,所有显示对象均继承自此类 Bitmap 位图,用来显示图片 Shape 用来显示矢量图,可以使用其中的方法绘制矢量图形 TextFie ...

  6. 编程规范之 if 语句的简单规则

    原文: http://www.oschina.net/translate/basic-rules-for-code-readability-and-the-if-statement 代码应该是可阅读就 ...

  7. Linux Weblogic 数据源 TimesTen配置

    [wzh@localhost middleware]$ vi wlserver_10.3/common/bin/commEnv.sh [Linux] LD_LIBRARY_PATH=${PATCH_L ...

  8. Linux&shell之处理用户输入

    写在前面:案例.常用.归类.解释说明.(By Jim) 命令行参数$1为第一个参数,$2为第二个参数,依次类推...示例: #!/bin/bash # using one command line p ...

  9. treap启发式合并

    注意输入v要在建根的前面. #include <cstdio> #include <iostream> #include <algorithm> #include ...

  10. Delphi——Window 消息 - 转载▼

    Delphi是Borland公司的一种面向对象的可视化软件开发工具. Delphi集中了Visual C++和Visual Basic两者的优点:容易上手.功能强大,特别是在界面设计.数据库编程.网络 ...