• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    React Native之ListView實現九宮格效果的示例

    來源:懂視網 責編:小采 時間:2020-11-27 22:33:29
    文檔

    React Native之ListView實現九宮格效果的示例

    React Native之ListView實現九宮格效果的示例:概述 在安卓原生開發中,ListView是很常用的一個列表控件,那么React Native(RN)如何實現該功能呢?我們來看一下ListView的源碼 ListView是基于ScrollView擴展得來的,所以具有ScrollView的相關屬性: dataSource:數據源,類似于安卓中我
    推薦度:
    導讀React Native之ListView實現九宮格效果的示例:概述 在安卓原生開發中,ListView是很常用的一個列表控件,那么React Native(RN)如何實現該功能呢?我們來看一下ListView的源碼 ListView是基于ScrollView擴展得來的,所以具有ScrollView的相關屬性: dataSource:數據源,類似于安卓中我

    概述

    在安卓原生開發中,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); 
    

    效果如圖(數據源自己加)

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    React Native之ListView實現九宮格效果的示例

    React Native之ListView實現九宮格效果的示例:概述 在安卓原生開發中,ListView是很常用的一個列表控件,那么React Native(RN)如何實現該功能呢?我們來看一下ListView的源碼 ListView是基于ScrollView擴展得來的,所以具有ScrollView的相關屬性: dataSource:數據源,類似于安卓中我
    推薦度:
    標簽: React native reac
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产精品igao视频| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 精品国产第1页| 国产精品高清在线观看| 中文国产成人精品久久不卡| 国产69精品久久久久99尤物| 国产精品1024香蕉在线观看| 无码人妻丰满熟妇精品区| 无码欧精品亚洲日韩一区夜夜嗨| 亚洲一区爱区精品无码| 国产精品亚洲产品一区二区三区| 伊人 久久 精品| 精品久久久久久久中文字幕 | 精品欧美一区二区在线看片| 国产精品久久久久久久| 亚洲精品无码成人片在线观看| 国产99视频精品免费专区| 亚洲精品无码久久久久去q| 久久久久久青草大香综合精品| 无码精品国产一区二区三区免费| 国产精品宾馆在线精品酒店 | 精品久久久久久国产| 无码精品一区二区三区在线 | 久久免费精品一区二区| 国产精品视频二区不卡| 亚洲处破女AV日韩精品| 亚洲国产一二三精品无码| 在线精品亚洲| 亚洲精品第一国产综合精品99| 国产成人精品精品欧美| 无码国产精品一区二区免费3p| 影视网欧洲精品| 国产精品视频网站| 国产一精品一av一免费爽爽| 国产精品视频第一页| 精品国产欧美另类一区| 精品视频一区二区三三区四区| 国内精品久久久人妻中文字幕| 欧美成人精品一级高清片| 99久久人妻无码精品系列| 91精品国产91久久久久福利|