首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定制React Native ListView的RefreshControl的外观

如何定制React Native ListView的RefreshControl的外观
EN

Stack Overflow用户
提问于 2016-07-08 07:48:26
回答 4查看 14.7K关注 0票数 22

React Native的ListView有一个内置的pull-to-refresh控件叫做RefreshControl。它非常容易使用。

我想自定义控件的外观,以使用不同的视觉设计,例如使用材料设计进度指示器。

如何在React Native中自定义RefreshControl的外观?

EN

回答 4

Stack Overflow用户

发布于 2017-01-01 03:16:05

你可以通过执行以下操作来智胜它:

  • 使用transparent absolute

transparent属性设置为absolute component

示例:

代码语言:javascript
复制
<View style={{height:Dimensions.get('window').height}}>
  {/* custom refresh control */}
  <View
    style={{position:'absolute',
      width:Dimensions.get('window').width, height:60,
      alignItems:'center', justifyContent:'center'}}>
    <Progress.CircleSnail
      color={['red', 'green', 'blue']}
      duration={700} />
  </View>
  {/* list view*/}
  <ListView
    dataSource={this.state.dataSource}
    refreshControl={
      <RefreshControl
        onLayout={e => console.log(e.nativeEvent)}
        // all properties must be transparent
        tintColor="transparent"
        colors={['transparent']}
        style={{backgroundColor: 'transparent'}}
        refreshing={this.state.refreshing}
        onRefresh={() => {
          this.setState({refreshing:true});
          setTimeout(() => {
            this._addRows()
          }, 2000);
        }}
        />
    }
    renderRow={(rowData) => <Text>{rowData}</Text>} />
</View>

这就是结果:

票数 19
EN

Stack Overflow用户

发布于 2016-10-31 01:26:54

你完全可以做到。不过,这需要做一些工作。你可以从写这样的代码开始。

代码语言:javascript
复制
<View style={styles.scrollview}>
  <View style={styles.topBar}><Text style={styles.navText}>PTR Animation</Text></View>
  <View style={styles.fillParent}>
    <Text>Customer indicator goes here...</Text>
  </View>
  <View style={styles.fillParent}>
    <ListView
      style={{flex: 1}}
      dataSource={this.state.dataSource}
      renderRow={(rowData) => <View style={styles.row}><Text style={styles.text}>{rowData}</Text></View>}
      ref='PTRListView'
    />
  </View>
</View>

当您拉动刷新时,您应该看到文本"Custom indicator to ...“

遵循此模式,您可以放置组件,而不仅仅是视图和文本。

感谢this article的点子。

票数 0
EN

Stack Overflow用户

发布于 2021-08-12 06:59:00

我是用react-native-pull-to-refresh-custom库做的

首先创建自定义加载器ListRefreshLoader

代码语言:javascript
复制
import React from 'react';
import {StyleSheet, View} from 'react-native';
import colors from '../../assets/colors';
import {wp} from '../../styles/responsiveScreen';
import Circuler from './Circuler';

const ListRefreshLoader = ({refreshing}) => {
  return (
    <View>
      {refreshing ? (
        <View style={styles.container}>
          <Circuler color={colors.gray} size={wp(6)} />
        </View>
      ) : null}
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    width: wp(15),
    height: wp(15),
    alignSelf: 'center',
    justifyContent: 'center',
    alignItems: 'center',
  },
});

export default ListRefreshLoader;

然后使用下面的方法

代码语言:javascript
复制
import PullToRefresh from 'react-native-pull-to-refresh-custom';
import ListRefreshLoader from '../../components/Loader/ListRefreshLoader';

 <PullToRefresh
        HeaderComponent={() => <ListRefreshLoader refreshing={refreshing} />}
        headerHeight={60}
        refreshTriggerHeight={60}
        refreshingHoldHeight={60}
        refreshing={refreshing}
        onRefresh={onRefresh}
        style={styles.list}>
        <FlatList
          data={friendsList}
          viewabilityConfig={{
            itemVisiblePercentThreshold: 90,
          }}
          maxToRenderPerBatch={100}
          removeClippedSubviews
          style={styles.list}
          keyExtractor={(item, index) => index.toString()}
          showsVerticalScrollIndicator={false}
          persistentScrollbar
          renderItem={renderItem}
          ItemSeparatorComponent={() => {
            return <View style={styles.listSeperator} />;
          }}
          ListEmptyComponent={totalUserFriends === 0 ? renderEmpty() : null}
          ListHeaderComponent={
            totalUserFriends !== 0 || searchText !== '' ? (
              <ListSearch
                placeHolder={`${t('Search')}...`}
                searchText={searchText}
                style={styles.searchStyle}
                fontName={'roboto-regular'}
                onSearchChange={(text) => setSearchText(text)}
                onClearSearch={() => {
                  setSearchText('');
                }}
                onEndEditing={() => setSearchText(searchText)}
              />
            ) : null
          }
        />
      </PullToRefresh>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38256972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档