React Native之ListView实现九宫格效果的示例
发布时间 - 2026-01-11 02:36:55 点击率:次概述

在安卓原生开发中,ListView是很常用的一个列表控件,那么React Native(RN)如何实现该功能呢?我们来看一下ListView的源码
ListView是基于ScrollView扩展得来的,所以具有ScrollView的相关属性:
dataSource:数据源,类似于安卓中我们传入BaseAdapter的数据集合。
renderRow:渲染某一行,类似于BaseAdapter中的getItem方法。
onEndReached:简单说就是用于分页操作,在安卓中原生开发中,我们需要自己实现相应的方法。
onEndReachedThreshold:调用onEndReached之前的临界值,单位是像素。
refreshControl:指定RefreshControl组件,用于为ScrollView提供下拉刷新功能。(该属性是继承与ScrollView)
renderHeader:渲染头部View,类似于安卓ListView中的addHeader.
以上的属性基本可以解决一些常见的列表需求,如果我们想要实现网格的效果,也可以借助该组件来实现,有点类似于安卓中的RecyclerView控件。
pageSize:渲染的网格数,类似于安卓GridView中的numColumns.
contentContainerStyle:该属性是继承于ScrollView,主要作用于该组件的内容容器上。
要用ListView实现九宫格的效果:
1,配置pageSize确认网格数量
<ListView
automaticallyAdjustContentInsets={false}
contentContainerStyle={styles.grid}
dataSource={this.state.dataSource}
renderRow={this.renderRow.bind(this)}
pageSize={3}
refreshControl={
<RefreshControl
onRefresh={this.onRefresh.bind(this)}
refreshing={this.state.isLoading}
colors={['#ff0000', '#00ff00', '#0000ff']}
enabled={true}
/>
}
/>
2,设置每一个网格的宽度样式
itemLayout:{
flex:1,
width:Util.size.width/3,
height:Util.size.width/3,
alignItems:'center',
justifyContent:'center',
borderWidth: Util.pixel,
borderColor: '#eaeaea'
},
3,设置contentContainerStyle相应属性
grid: {
justifyContent: 'space-around',
flexDirection: 'row',
flexWrap: 'wrap'
},
这里需要说明下,由于ListView的默认方向是纵向的,所以需要设置ListView的contentContainerStyle属性,添加flexDirection:‘row'。其次,ListView在同一行显示,而且通过flexWrap:'wrap'设置自动换行。
注:flexWrap属性:wrap、nowrap,wrap:空间不足的情况下自动换行,nowrap:空间不足,压缩容器,不会自动换行。
以下是完整代码:
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
ListView,
Image,
TouchableOpacity, // 不透明触摸
AlertIOS
} from 'react-native';
// 获取屏幕宽度
var Dimensions = require('Dimensions');
const screenW = Dimensions.get('window').width;
// 导入json数据
var shareData = require('./shareData.json');
// 一些常亮设置
const cols = 3;
const cellWH = 100;
const vMargin = (screenW - cellWH * cols) / (cols + 1);
const hMargin = 25;
// ES5
var ListViewDemo = React.createClass({
// 初始化状态值(可以变化)
getInitialState(){
// 创建数据源
var ds = new ListView.DataSource({rowHasChanged:(r1,r2) => r1 !== r2});
return{
dataSource:ds.cloneWithRows(shareData.data)
}
},
render(){
return(
<ListView
dataSource={this.state.dataSource}
renderRow={this.renderRow}
contentContainerStyle={styles.listViewStyle}
/>
);
},
// 返回cell
renderRow(rowData){
return(
<TouchableOpacity activeOpacity={0.8} onPress={()=>{AlertIOS.alert('点击了')}} >
<View style={styles.innerViewStyle}>
<Image source={{uri:rowData.icon}} style={styles.iconStyle} />
<Text>{rowData.title}</Text>
</View>
</TouchableOpacity>
);
},
});
const styles = StyleSheet.create({
listViewStyle:{
// 主轴方向
flexDirection:'row',
// 一行显示不下,换一行
flexWrap:'wrap',
// 侧轴方向
alignItems:'center', // 必须设置,否则换行不起作用
},
innerViewStyle:{
width:cellWH,
height:cellWH,
marginLeft:vMargin,
marginTop:hMargin,
// 文字内容居中对齐
alignItems:'center'
},
iconStyle:{
width:80,
height:80,
},
});
AppRegistry.registerComponent('ListViewDemo', () => ListViewDemo);
效果如图(数据源自己加)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# React
# Native
# 实现九宫格
# 九宫格
# ReactNative列表ListView的用法
# React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
# 类似于
# 换行
# 临界值
# 要用
# 分页
# 如图
# 来实现
# 得来
# 大家多多
# 如何实现
# 设置自动
# 作用于
# 不透明
# 不起作用
# 情况下
# 是基于
# borderWidth
# colors
# state
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
网站建设整体流程解析,建站其实很容易!
免费视频制作网站,更新又快又好的免费电影网站?
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
Python并发异常传播_错误处理解析【教程】
如何挑选高效建站主机与优质域名?
Laravel如何为API生成Swagger或OpenAPI文档
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
如何在阿里云部署织梦网站?
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
Laravel如何创建自定义Artisan命令?(代码示例)
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
简单实现Android验证码
如何生成腾讯云建站专用兑换码?
微信小程序 canvas开发实例及注意事项
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
Python进程池调度策略_任务分发说明【指导】
网站制作壁纸教程视频,电脑壁纸网站?
Python函数文档自动校验_规范解析【教程】
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
如何在建站之星绑定自定义域名?
iOS正则表达式验证手机号、邮箱、身份证号等
高端建站三要素:定制模板、企业官网与响应式设计优化
Laravel如何实现API资源集合?(Resource Collection教程)
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
Android GridView 滑动条设置一直显示状态(推荐)
如何在IIS中新建站点并配置端口与IP地址?
nginx修改上传文件大小限制的方法
Laravel怎么在Controller之外的地方验证数据
如何在阿里云虚拟服务器快速搭建网站?
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
Laravel如何处理表单验证?(Requests代码示例)
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
西安专业网站制作公司有哪些,陕西省建行官方网站?
IOS倒计时设置UIButton标题title的抖动问题
教你用AI将一段旋律扩展成一首完整的曲子
Laravel Fortify是什么,和Jetstream有什么关系
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
如何快速搭建二级域名独立网站?
浅析上传头像示例及其注意事项
如何挑选优质建站一级代理提升网站排名?
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
深入理解Android中的xmlns:tools属性
bing浏览器学术搜索入口_bing学术文献检索地址

