ListView简单使用《二》—>CollectionView效果实现案例
此案例是在ListView基础上进行的进一步深化使用,步骤与ListView一致,首先还是设置ListView的DataSource,注意事项与前一篇 ListView的简单使用《一》—>普通图文展示案例 一致,直接上代码: getInitialState(){ var dss = new ListView.DataSource({rowHasChanged:(r1,r2)=> r1 !== r2}); return { dataSource:dss.cloneWithRows(ImgDatas.data) } },
render() { return ( <View style={styles.container}> <ListView dataSource={this.state.dataSource} renderRow={this.renderRow} contentContainerStyle={styles.listViewStyle} /> </View> ); }, 添加每行显示的控件,并进行可点击设置,并进行返回,renderRow方法中的四个参数依次为,每行的数据、行ID,组ID,以及高亮显示的行,可省略不写,也可根据自己的需求,进行相应的添加。 renderRow(rowData,rowID,sectionID,highlightRow){ return( <TouchableOpacity activeOpacity={0.5} onPress={this.cellTouched}> <View style={styles.cellContentViewStyle}> <Image style={styles.cellImageStyle} source={{uri:rowData.icon}}/> <Text>{rowData.title}</Text> </View> </TouchableOpacity> ); },
每行的点击事件,点击之后需要做什么都在这个方法中实现 cellTouched(){ },
在该案列中,最主要的是对界面布局的CSS样式的设置,设置如下: const styles = StyleSheet.create({ container: { flex: 1,},listViewStyle:{ flexDirection:'row',// //多行显示 flexWrap: "wrap",alignItems: 'flex-start',cellContentViewStyle:{ width:cellWH,height:cellWH,marginLeft:Hmargin,marginTop:Vmargin,alignItems:'center' },cellImageStyle:{ width:80,height:80,marginBottom:5,});
需要特别注意的是:
本案例中用到的几个比较重要的属性: 1.获取屏幕宽度 var Dimensions = require('Dimensions'); 2.设置每行显示个数 var cols = 3;
3.设置每个cell的宽度 var cellWH = 100;
4.计算cell中间距离 var Hmargin = (windowWidth - cellWH * cols) / (cols + 1);
5.ListView设置上边距 var Vmargin = 25;
效果图如下:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |