GridView横向滚动

2023-11-04

GridView和ListView都是android比较重要的控件,但是横滚的控件不是太多。

这里介绍怎么把GridView横向滚动起来,看到其他网友也有相应的解决方法,自己只是把这些知识总结一下,供大家参考!

首先让GridView横向滚动需要HorizontalScrollView这个控件,例如:

  1. <SPAN style="FONT-FAMILY: 'Microsoft YaHei'; FONT-SIZE: 14px"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent" >  
  5.   
  6.     <HorizontalScrollView  
  7.         android:layout_width="fill_parent"  
  8.         android:layout_height="wrap_content"  
  9.         android:scrollbars="none" >  
  10.   
  11.         <LinearLayout  
  12.             android:layout_width="fill_parent"  
  13.             android:layout_height="wrap_content"  
  14.             android:orientation="horizontal" >  
  15.   
  16.             <GridView  
  17.                 android:id="@+id/gridview"  
  18.                 android:layout_width="fill_parent"  
  19.                 android:layout_height="wrap_content"  
  20.                 android:layout_gravity="center" >  
  21.             </GridView>  
  22.         </LinearLayout>  
  23.     </HorizontalScrollView>  
  24.   
  25. </LinearLayout></SPAN>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <HorizontalScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scrollbars="none" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <GridView
                android:id="@+id/gridview"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center" >
            </GridView>
        </LinearLayout>
    </HorizontalScrollView>

</LinearLayout>

以上是主要布局,然后我们写GridView中每个item中的布局,比较简单,只是给大家介绍下:

  1. <SPAN style="FONT-FAMILY: 'Microsoft YaHei'; FONT-SIZE: 14px"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="wrap_content"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <ImageView  
  8.         android:layout_width="100dp"  
  9.         android:layout_height="100dp"  
  10.         android:background="#00ff00" />  
  11.   
  12.     <TextView  
  13.         android:id="@+id/item_textview"  
  14.         android:layout_width="100dp"  
  15.         android:layout_height="20dp"  
  16.         android:gravity="center" />  
  17.   
  18. </LinearLayout></SPAN>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="#00ff00" />

    <TextView
        android:id="@+id/item_textview"
        android:layout_width="100dp"
        android:layout_height="20dp"
        android:gravity="center" />

</LinearLayout>

上面是item的布局,比较简单,就是一个ImageView和TextView,然后是主要实现GridView的Adapter。

以下是Activity的实现方法。

  1. <SPAN style="FONT-FAMILY: 'Microsoft YaHei'; FONT-SIZE: 14px">public class MainActivity extends Activity {  
  2.   
  3.     private GridView gridView;  
  4.     private LayoutInflater inflater;  
  5.     private List<String> dataList = new ArrayList<String>();  
  6.   
  7.     @Override  
  8.     public void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.activity_main);  
  11.         gridView = (GridView) this.findViewById(R.id.gridview);  
  12.         for (int i = 0; i < 10; i++) {  
  13.             dataList.add("测试" + i);  
  14.         }  
  15.         inflater = (LayoutInflater) this  
  16.                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  17.         GridViewAdapter adapter = new GridViewAdapter();  
  18.         gridView.setAdapter(adapter);  
  19.         int size = dataList.size();  
  20.         DisplayMetrics dm = new DisplayMetrics();  
  21.         getWindowManager().getDefaultDisplay().getMetrics(dm);  
  22.         float density = dm.density;  
  23.         int allWidth = (int) (110 * size * density);  
  24.         int itemWidth = (int) (100 * density);  
  25.         LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(  
  26.                 allWidth, LinearLayout.LayoutParams.FILL_PARENT);  
  27.         gridView.setLayoutParams(params);  
  28.         gridView.setColumnWidth(itemWidth);  
  29.         gridView.setHorizontalSpacing(10);  
  30.         gridView.setStretchMode(GridView.NO_STRETCH);  
  31.         gridView.setNumColumns(size);  
  32.     }  
  33.   
  34.     @Override  
  35.     public boolean onCreateOptionsMenu(Menu menu) {  
  36.         getMenuInflater().inflate(R.menu.activity_main, menu);  
  37.         return true;  
  38.     }  
  39.   
  40.     final class GridViewAdapter extends BaseAdapter {  
  41.           
  42.         @Override  
  43.         public int getCount() {  
  44.             return dataList.size();  
  45.         }  
  46.   
  47.         @Override  
  48.         public Object getItem(int position) {  
  49.             return dataList.get(position);  
  50.         }  
  51.   
  52.         @Override  
  53.         public long getItemId(int position) {  
  54.             return position;  
  55.         }  
  56.   
  57.         @Override  
  58.         public View getView(int position, View convertView, ViewGroup parent) {  
  59.             convertView = inflater.inflate(R.layout.gridview_item, null);  
  60.             TextView textView = (TextView) convertView  
  61.                     .findViewById(R.id.item_textview);  
  62.             String str = dataList.get(position);  
  63.             textView.setText(str);  
  64.             return convertView;  
  65.         }  
  66.   
  67.     }  
  68. }</SPAN>  
public class MainActivity extends Activity {

	private GridView gridView;
	private LayoutInflater inflater;
	private List<String> dataList = new ArrayList<String>();

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		gridView = (GridView) this.findViewById(R.id.gridview);
		for (int i = 0; i < 10; i++) {
			dataList.add("测试" + i);
		}
		inflater = (LayoutInflater) this
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		GridViewAdapter adapter = new GridViewAdapter();
		gridView.setAdapter(adapter);
		int size = dataList.size();
		DisplayMetrics dm = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(dm);
		float density = dm.density;
		int allWidth = (int) (110 * size * density);
		int itemWidth = (int) (100 * density);
		LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
				allWidth, LinearLayout.LayoutParams.FILL_PARENT);
		gridView.setLayoutParams(params);
		gridView.setColumnWidth(itemWidth);
		gridView.setHorizontalSpacing(10);
		gridView.setStretchMode(GridView.NO_STRETCH);
		gridView.setNumColumns(size);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

	final class GridViewAdapter extends BaseAdapter {
		
		@Override
		public int getCount() {
			return dataList.size();
		}

		@Override
		public Object getItem(int position) {
			return dataList.get(position);
		}

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

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			convertView = inflater.inflate(R.layout.gridview_item, null);
			TextView textView = (TextView) convertView
					.findViewById(R.id.item_textview);
			String str = dataList.get(position);
			textView.setText(str);
			return convertView;
		}

	}
}

主要是设置GridView的LayoutParams,new 这个LayoutParams对象必须是这个View所在Layout的布局类型,然后设置GridView总长度和每个item的长度,然后设置总个数就可以实现横滚的效果!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GridView横向滚动 的相关文章

随机推荐

  • MySQL中的事件

    MySQL中的事件 event 是用于执行定时或周期性的任务 类似Linux中的crontab 但是后者只能精确到分钟 事件可以精确到秒 既然MySQL自身能实现定时性任务 那么就不必在应用层实现了 事件由一个特定的线程来管理的 也就是所谓
  • Python 23.opencv 单对象模板匹配

    import cv2 import numpy as np from matplotlib import pyplot as plt img cv2 imread lane jpg 0 img2 img copy template cv2
  • STM32F030 多通道ADC DMA采集

    利用STM32F030C8T6的PA0和PA1引脚来进行两通道ADC采集 通过DMA方式 直接上代码 1 ADC的GPIO引脚配置 void ADC GPIO Config void GPIO InitTypeDef GPIO InitSt
  • 相机旋转 缩放效果 模型整体展示 部分展示

    using UnityEngine using System Collections using System Collections Generic using DG Tweening using UnityEngine EventSys
  • 修改Android镜像文件 ramdisk.img、system.img、userdata.img获取root权限

    首先 介绍一下这三个文件 ramdisk img 是你make android源代码后 生成的 out target product generic root目录下经过打包压缩而成的 system img 是你make android源代码
  • JavaWeb项目导致Linux服务器CPU过高的解决方案

    最近我部署在centos7上的一个项目出现了CPU达到了100 的状态 导致项目崩溃 起初没重视 直接重启项目解决 后面项目运行了几天服务器又报警100 了 这个时候我才意识到项目问题的严重性 然后开始查找原因 查看数据库连接池 发现数据库
  • 关于class.getResourceAsStream() 与class.getClassLoader().getResourceAsStream()区别

    首先用类加载资源文件的方式可以有以下三种 包结构图 1 InputStreaminStream DaoFactory class getResourceAsStream dao properties 2 inStream DaoFactor
  • ES6模块化及webpack配置

    前端使用的一个模块打包工具 https webpack js org webpack安装 安装 node npm 因为webpack是基于node开发的 通过 npm yarn 的方式来安装 webpack 安装方式 全局安装 npm in
  • Linux C++ 网络编程基础(2) : TCP多线程一个server对应多个client

    目录 一 linux posix线程相关函数介绍 二 tcp server基础版本 三 tpc服务端多线程版本 四 tpc客户端代码 tcp编程时 一个server可以对应多个client server端用多线程可以实现 linux下多线程
  • bash_profile和.bashrc的区别

    1 etc profile 此文件为系统的每个用户设置环境信息 当用户第一次登录时 该文件被执行 并从 etc profile d目录的配置文件中搜集shell的设置 2 etc bashrc 为每一个运行bash shell的用户执行此文
  • Java中关于thread的停止问题

    stop Deprecated public final void stop Throwable obj 已过时 该方法具有固有的不安全性 请参阅 stop 以获得详细信息 该方法的附加危险是它可用于生成目标线程未准备处理的异常 包括若没有
  • DES加密Delphi、C#互通(CBC加密模式)

    Delphi 目录 https blog csdn net dkbnull article details 87935698 unit Unit1 interface uses Windows Classes SysUtils Dialog
  • Docker实战-编写Dockerfile

    一 编译镜像 1 编译镜像 Dockerfile类似于Makfile 用户使用docker build就可以编译镜像 使用该命令可以设置编译镜像时使用的CPU数量 内存大小 文件路径等 语法 docker build OPTIONS PAT
  • 初学Spring框架

    Spring 是一个java 项目开发的框架技术 所谓框架可以看成一个项目的半成品 已经具备了一个项目项目的基本骨架部分 需要自己实现一些具体的内容 Spring官网 初学Spring框架 Spring Framework 简介 IoC 入
  • Unity实战篇:讨论动画过程和计算伤害之间的关系

    在开发游戏的时候 我们会遇到这样的需求 当人物的攻击落到敌人身上时 播放特效 声效 产生伤害 等等一系列要求 那么我们要怎么实现呢 先了解一下怎么添加动画帧事件 https blog csdn net qq 15020543 article
  • Matlab学习5-图像处理之图像乘法、除法、边缘检测

    Matlab学习5 图像处理之逻辑运算 图像乘法 除法 边缘检测 1 图像乘法 效果 代码 图像相乘 img1 imread img rice png img2 imread img F4 11b MASK bmp img3 immulti
  • 【Getting Started with LLVM Core Libraries】P30 3.4 实验 使用独立工具

    LLVM学习笔记 Getting Started with LLVM Core Libraries P30 3 4 实验 使用独立工具 我们来看一个由分散在多个源文件中的函数组成的简单的C程序 但是 我们使用独立工具也可以获得相同的结果 为
  • 重定向爬虫和多线程爬虫

    前言 重定向爬虫是指在抓取网页时 如果目标网站内部存在重定向机制 即当你访问一个网页时 服务器会把你重定向到另一个目标网页 重定向爬虫可以帮助我们发现这种重定向链接 从而更有效地抓取目标网站的内容 要实现重定向爬虫 你需要在爬虫代码中添加重
  • 【云原生进阶之PaaS中间件】第一章Redis-1.2数据类型

    1 Redis 数据类型 Redis支持五种数据类型 string 字符串 hash 哈希 list 列表 set 集合 及zset sorted set 有序集合 1 1 String 字符串 string是redis最基本的类型 你可以
  • GridView横向滚动

    GridView和ListView都是android比较重要的控件 但是横滚的控件不是太多 这里介绍怎么把GridView横向滚动起来 看到其他网友也有相应的解决方法 自己只是把这些知识总结一下 供大家参考 首先让GridView横向滚动需