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的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
清除minerd进程的简单方法
桂林网站制作公司有哪些,桂林马拉松怎么报名?
如何用已有域名快速搭建网站?
Laravel如何实现用户密码重置功能?(完整流程代码)
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
javascript基于原型链的继承及call和apply函数用法分析
青岛网站建设如何选择本地服务器?
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Laravel怎么上传文件_Laravel图片上传及存储配置
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
微信小程序 HTTPS报错整理常见问题及解决方案
如何用狗爹虚拟主机快速搭建网站?
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
制作企业网站建设方案,怎样建设一个公司网站?
Laravel如何实现API版本控制_Laravel版本化API设计方案
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
Linux网络带宽限制_tc配置实践解析【教程】
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Laravel怎么在Blade中安全地输出原始HTML内容
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
如何用AI帮你把自己的生活经历写成一个有趣的故事?
如何做网站制作流程,*游戏网站怎么搭建?
个人网站制作流程图片大全,个人网站如何注销?
如何在宝塔面板创建新站点?
如何在云指建站中生成FTP站点?
Laravel如何实现一对一模型关联?(Eloquent示例)
公司网站制作价格怎么算,公司办个官网需要多少钱?
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
七夕网站制作视频,七夕大促活动怎么报名?
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
使用Dockerfile构建java web环境
JavaScript数据类型有哪些_如何准确判断一个变量的类型
文字头像制作网站推荐软件,醒图能自动配文字吗?
如何在香港服务器上快速搭建免备案网站?
js实现点击每个li节点,都弹出其文本值及修改
如何快速搭建高效服务器建站系统?
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
微信推文制作网站有哪些,怎么做微信推文,急?
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程

