ReactNative实现GridView
ReactNative
内置了ListView
组件但是没有类似GridView
这样的组件。利用一些已经有的属性是可以实现GridView
的,利用ContentContainerStyle
的属性然后配合样式就可以实现GridView
。
import React, {Component} from 'react';
import {
StyleSheet,
Text,
View,
ListView,
TouchableWithoutFeedback
} from 'react-native';
const styles = StyleSheet.create({
contentContainerStyle: {
flexDirection: 'row',
flexWrap: 'wrap',
alignItems: 'flex-start',
justifyContent: 'space-between'
},
});
export default class GridView extends Component {
constructor(props) {
super(props);
let dividerHorizontal = this.props.dividerHorizontal ? this.props.dividerHorizontal : 0;
let column = this.props.column ? this.props.column : 2;
let emptyDataSource = new ListView.DataSource({
rowHasChanged: (r1, r2)=>r1 != r2
})
this.state = {
'dataSource': emptyDataSource,
'column': column,
'viewWidth': 0,
'dividerHorizontal': dividerHorizontal
};
}
_renderItem(data) {
let viewWidth = this.state.viewWidth;
let column = this.state.column;
let dividerHorizontal = this.state.dividerHorizontal;
let itemWidth = (viewWidth - (dividerHorizontal * column - dividerHorizontal)) / column;
let renderItem = this.props.renderItem;
return (
<View style={{width: itemWidth}}>
{
renderItem && renderItem(data)
}
</View>
);
}
render() {
let refreshControl = this.props.refreshControl ? this.props.refreshControl : null;
return (
<View
style={{flex: 1}}
onLayout={(event)=> {
let width = event.nativeEvent.layout.width;
if (!width || width === this.state.viewWidth)
return;
this.setState({
'viewWidth': width,
'dataSource': this.props.dataSource
})
}}>
<ListView
style={{flex: 1}}
contentContainerStyle={styles.contentContainerStyle}
dataSource={this.state.dataSource}
renderRow={this._renderItem.bind(this)}
refreshControl={refreshControl}
/>
</View>
);
}
}
《架构文摘》每天一篇架构领域重磅好文,涉及一线互联网公司应用架构(高可用、高性 能、高稳定)、大数据、机器学习等各个热门领域。
ReactNative实现GridView的更多相关文章
- Android GridView 通过seletor 设置状态和默认状态
Android中可以通过selector控制GridView Item 的状态,而省去使用代码控制 GridView View Selector Xml文件 <?xml version=&quo ...
- Asp.Net 操作XML文件的增删改查 利用GridView
不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...
- 在DevExpress程序中使用GridView直接录入数据的时候,增加列表选择的功能
在我上篇随笔<在DevExpress程序中使用Winform分页控件直接录入数据并保存>中介绍了在GridView以及在其封装的分页控件上做数据的直接录入的处理,介绍情况下数据的保存和校验 ...
- Android listview和gridview以及view的区别
GridView 可以指定显示的条目的列数. listview一般显示的条目的列数都是一列 如果是列表(单列多行形式)的使用ListView,如果是多行多列网状形式的优先使用GridView andr ...
- ReactNative入门 —— 动画篇(上)
在不使用任何RN动画相关API的时候,我们会想到一种非常粗暴的方式来实现我们希望的动画效果——通过修改state来不断得改变视图上的样式. 我们来个简单的示例: var AwesomeProject ...
- ReactNative入门(安卓)——API(下)
LayoutAnimation - layout动画 当布局发生改变时的动画模块,它有两个方法: 1. 最常用的方法是 LayoutAnimation.configureNext(conf<Ob ...
- ReactNative入门(安卓)——API(上)
Alert - 弹窗 通过 Alert.alert() 方法调用唤起原生弹窗,点击会触发 onPress 回调(参考下方代码)并清除弹窗. import React, { AppRegistry, C ...
- React-Native 组件开发方法
前言 React Native的开发思路是通过组合各种组件来组织整个App,在大部分情况下通过组合View.Image等几个基础的组件,可以非常方便的实现各种复杂的跨平台组件,不过在需要原生功能支持. ...
- React-Native 渲染实现分析
前言 React Native与传统的HybirdApp最大区别就是抛开WebView,使用JSC+原生组件的方式进行渲染,那么整个App启动/渲染流程又是怎样的呢? React Native启动流程 ...
随机推荐
- zookeeper快速上手
## # zookeeper的基本功能和应用场景 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件. ...
- python批量处理压缩文件
python批量处理压缩文件 博客小序:在数据的处理中,下载的数据很有可能是许多个压缩文件,自己一个一个解压较为麻烦,最近几日自己在处理一次下载的数据时,遇到大量的压缩数据需要处理,于是利用pytho ...
- nginx-springboot-vue前后端分离跨域配置
nginx-springboot-vue前后端分离跨域配置 引言 接着上篇--简单的springboot-vue前后端分离登录Session拦截的demo,其中跨域是通过springboot后端全局设 ...
- Redis各数据结构常用命令
redis 通用API keys * 遍历所有key 一般不在生产环境中使用 redis单线程,容易阻塞其他命令执行 O(n) dbsize 计算key的总数 O(1)exists 检查key是否存在 ...
- python实现去掉空行
# coding = utf-8def clearBlankLine(): file1 = open('text1.txt', 'r', encoding='utf-8') # 要去掉空行的文件 fi ...
- win10 设定计划任务时提示所指定的账户名称无效,如何解决?
我想把我的 python 爬虫脚本设定为自动定时执行,我的设备是win10 操作系统,这将用到系统自带的计划任务功能.且我希望不管用户是否登录都要运行该定时任务,但在设置计划任务的属性时,遇到一个报错 ...
- eclipse中SpringBoot的maven项目出现无法解析父类的解决办法
在eclipse中建立SpringBoot的maven项目时,继承父类,添加如下代码: <parent> <groupId>org.springframework.boot&l ...
- SpringCloud 学习(二)-2 :Securing The Eureka Server
由于工作等种种原因未能连续进行学习,现在继续学习微服务,不过是新建的demo,springcloud版本用的是Finchley.SR2. 之前用简单demo实现了注册中心,现在来对注册中心加安全验证: ...
- java路障CyclicBarrier
当所有线程都执行到某行代码,才可已往下执行: package threadLock; import java.util.Random; import java.util.concurrent.Brok ...
- 如何在Centos服务器上搭建起Oracle10、VNC、以及FTP
一.重装和分区 1.配置所需磁盘阵列(Raid): 2.正确分区: 3.Centos安装:过于简单,请自行bd. 二.连网 系统安装完成之后,我们需为其分配IP和DNS: "编辑连接&quo ...