鄱阳县 泰来县 涪陵区 重庆市 板桥市 本溪市 乐都县 大化 蓝山县 井陉县 东阿县 介休市 平湖市 磐安县 利津县 独山县

文章导航软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:单机游戏角色扮演 → 怪物猎人世界新装备介绍 怪物猎人世界新装备新系统一览

百度浏览器_自定义react-navigation的TabBar

标签:死有余罪 博雅德州扑克 wsc

在某些情况下,默认的react-navigation的tab bar无法满足开发者的要求。这个时候就需要自定义一个tab bar了。本文就基于react-navigtion v2来演示如何实现一个自定义tab bar。

这里主要处理的是再android里,当界面中有输入框,唤起软键盘的时候位于底部的tab bar也会浮动到键盘的上方。这显然不是我们需要的。所以,需要用自定义的tab bar来解决这个问题。

Keyboard模块

问题是,有键盘的时候tabbar会被顶起来,键盘消失的时候tab bar也会恢复到正常的位置。
那么处理这个问题的最好办法就是,当键盘唤起的时候让tab bar不可见,当键盘消失当时候再让tab bar显示出来。

这就需傲世九重天_2018年最新新闻网要用到Keyboard了。

import { Keyboard } from "react-native";

Keyboard模块专门用来处理键盘事件。通过这个模块我们就可以得知键盘要唤起,还是要消失。

import Rea总裁在上_2018年最新新闻网ct, { Component } from "react";
import { Keyboard, TextInput } from "react-native";

class Example extends Component {
  componentDidMount () {
    this.keyboardDidShowListener = Keyboard.addListener("keyboardDidShow", this._keyboardDidShow);
    this.keyboardDidHideListener = Keyboard.addListener("keyboardDidHide", this._keyboardDidHide);
  }

  componentWillUnmount () {
    this.keyboardDidShowListener.remove();
    this.keyboardDidHideListener.remove();
  }

  _keyboardDidShow () {
遮天_2018年最新新闻网    alert("Keyboard Shown");
  }

  _keyboardDidHide () {
    alert("Keyboard Hidden");
  }

  render() {
    return (
      <TextInput
        onSubmitEditing={Keyboard.dismiss}
      />
    );
  }
}

componentDidMount的时候绑定键盘的两个事件:

  1. keyboardDidShow, 键盘即将出现
  2. keyboardDidHide, 键盘即将隐藏

通过Keyboard模块绑定了这两个事件之后就可以在绑定的回调里让tab bar显示和隐藏了。

自定义tab bar

在react-navigation v2中,要实现自定义的tab bar非常简单:

import {
  createBottomTabNavigator,
  createStackNavigator,
} from "react-navigation";

class DetailsScreen extends React.Component {
  render() {
    return (
      <View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
        <Text>Details!</Text>
      </View>
    );
  }
}

class HomeScreen extends React.Component {
  render() {
    return (
      <View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
        {/* other code from before here */}
        <Button
          title="Go to Details"
          onPress={() => this.props.navigation.navigate("Details")}
        /&g藏地密码_2018年最新新闻网t;
      </View>
    );
  }
}

class SettingsScreen extends React.Component {
  render() {
    return (
      <View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
        {/* other code from before here */}
        <Button
          title="Go to Details"
          onPress={() => this.props.navigation.navigate("Details")}
        />
      </View>
    );
  }
}

const HomeStack = createStackNavigator({
  Home: HomeScreen,
  Details: DetailsScreen,
});

const SettingsStack = createStackNavigator({
  Settings: SettingsScreen,
  Details: DetailsScreen,
});

export default cr女生因欺凌获刑_2018年最新新闻网eateBottomTabNavigator(
  {
    Home: HomeStack,
    Settings: SettingsStack,
  },
  {
    /* Other configuration remains unchanged */
  }
);

这里创建了一个每一个tab项都是一个stack navigator的tab bar。这里当然使用的是默认的tab bar。方法createBottomTabNavigator会返回一个在底部的tab bar。

我们来添加一个自定义的tab bar:

// ...略...

export default createBottomTabNavigator(
  {
    Home: HomeStack,
    Settings: SettingsStack,
  },
  {
    tabBarComponent: CustomTabComponent,
  }
);

CustomTabView就是自定义的tab bar。

当程序运行起来以后,react-navigation会把tab bar所需要的内容(tab的label、icon、navigate到什么地方等都通过prop的方式传进来)。但是,我们这里并不打算做其他的定制,所以可以通过一个简单的方式把这些t爸爸去哪儿5开播_2018年最新新闻网ab bar的item都绘制出来。

这就需要用到react-navigation-tabs。这个包提供了tab bar的所有默认的实现。包括上面提到的props的解析都有。看下代码:

import React from "react";
import { Keyboard } from "react-native";
import { BottomTabBar } from "react-navigation-tabs";

type Prop = {};
type State = { visible: boolean };

export default class CustomTabComponent extends React.Component<Prop, State> {
  state: State = { visible: true };

  componentDidMount() {
    this.kbShowListener = Keyboard.addListener("keyboardDidShow", this.keyboardWillShow);
    this.kbHideListener = Keyboard.addListener("keyboardDidHide", this.keyboardWillHide);
  }

  keyboardWillShow = () => {
    console.log("keyboardwillshow");
    this.setState({ visible: false });
  };

  keyboardWillHide = () => {
    console.log("keyboardwillhide");
    this.setState({ visible: true });
  };

  componentWillUnmount() {
    this.kbShowListener.remove();
    this.kbHideListener.remove();
  }

  render() {
    return this.state.visible && <BottomTabBar {...this.props} />;
  }
}

在keyboard显示的时候隐藏tab bar:

  keyboardWillShow = () => {
    this.setState({ visible: false });
  };

在键盘隐藏的时候显示tab bar:

  keyboardWillHide = () => {
    this.setState({ visible: true });
  };

显示出全部的tab item:

  render() {
    return this.state.visible && <BottomTabBar {...this.props} />;
  }

最后

处理软键盘导致的tab bar上浮这个问题就完美解决了。其他的很多时候软键盘的出现都会导致类似的问题。基本上都可以通过绑定Keyboard模块的方式来解决。

对于tab bar本身有定制需要的,则可以通过自定义tab bar实现。正好本文解决了软键盘对tab bar的影响,也开是了一个解决自定义tab bar的门。有深度定义tab bar的同学,就需要解析从react-navigation传过来的props了。

当前文章:http://aeugj8rm-jiadeliang-com.manconsultant.cn/ok3ufo0/0ae94_156217.html

发布时间:2019-07-16 01:22:51

普京7日宣誓就任俄罗斯新一届总统 开始六年任期  澳门银河2949所有网址李易峰凌晨发文庆31岁生日 何炅魏大勋等送祝福  澳门银河娱乐送彩金网站  小伙婚前全款买房 离婚后法院判99%房产归女方  澳门银河官网手机app  网红流沙手机壳遇尴尬:乘客空乘携带必须走空运  小伙婚前全款买房 离婚后法院判99%房产归女方  澳门银河娱乐yh163am.com  澳门银河yh7788.bet  银河娱乐是正规网站吗  

相关阅读 如何利用Emacs进行个人时间管理(GTD)终于支持改号!腾讯王卡史诗级服务上线Daily Pathtracer!安利下不错的Pathtracer学习资料意大利政党达成共识 推举54岁法学教授为总理人选京东618图书超品日:自营每满100减50,跨店每满199减100互联网女皇:2017年智能手机销量首次滑坡意大利政党达成共识 推举54岁法学教授为总理人选手机QQ安卓版现奇葩吐槽“彩蛋”

文章评论
发表评论

热门文章 有颜值还治愈,百年老厂百乐出品就是好笔DX11 Without DirectX SDK--08 Direct2D与Direct3D互操作性以及利用DWrite显示文字精梳棉制作,布衣不二圆领短袖T恤2件29元(30元券)海南省卫计委:内地首针九价HPV疫苗将于30日接种

最新文章 Python3 与 C# 基础语法对比(String专栏)让更多人吃上三文鱼,养殖户用上机器人和激光 《星际公民》推出天价DLC:仅限高级玩家享受特权带着她和它——坝上避暑之行无中生有!网传《底特律:变人》将从6月1日起被禁播系谣言公告:全新IT之家移动版站点上线!启用新二级域名

人气排行 常州市推进创建国家农产品质量安全工作如何提升自己当前在软件市场的竞争力?mtools-你可能没用过的mongodb神器一个时代结束,佳能卖出最后一台胶片相机集7大优点于一身的T恤,买一送三天猫618发红包,如何领看这一篇文章就够了B站董事长陈睿独家回应:高楠楠报案我们也不怕,相信法律公正Facebook广告工具歧视大龄求职者:多家雇主被诉讼