我如何设计或配置 android 的反应导航选项卡以适应

How do I style or configure the react navigation tabs for android to fit

我有一个使用 react native 的选项卡导航,react-navigation 我的 5 个选项卡在 android 上太挤了,但在 iOS 上看起来不错。如何设计标签以适合 android?我可以让选项卡水平滚动吗?我想我记得在某处看到过 - 这是标准的 android 行为吗?

嗯,首先您需要决定是要在 Android 应用程序的底部还是顶部设置标签页。我选择底部,我只有图标,没有文本(我这样做是因为 Android 上的 React Navigation 上带有文本的图标非常拥挤,但在 iPhone 上看起来不错)。下面是一些示例代码:

import React from 'react';
import { TabNavigator } from 'react-navigation';
import { MaterialIcons, Ionicons } from '@expo/vector-icons';
import { Platform } from 'react-native';

// Import Screens
import Screen1 from '../screens/Screen1';
import Screen2 from '../screens/Screen2';

export const Tabs = TabNavigator({
  Screen1: {
    screen: Screen1,
    navigationOptions: {
      tabBarLabel: 'Screen1',
      tabBarIcon: ({ tintColor }) => <MaterialIcons name='account-circle' size={26} style={{ color: tintColor }} />
    },
  },
  Screen2: {
    screen: Screen2,
    navigationOptions: {
      tabBarLabel: 'Screen2',
      tabBarIcon: ({ tintColor }) => <Ionicons name='ios-time' size={26} style={{ color: tintColor }} />
    },
  },
}, {
    headerMode: 'none',        // I don't want a NavBar at top
    tabBarPosition: 'bottom',  // So your Android tabs go bottom
    tabBarOptions: {
      activeTintColor: 'red',  // Color of tab when pressed
      inactiveTintColor: '#b5b5b5', // Color of tab when not pressed
      showIcon: 'true', // Shows an icon for both iOS and Android
      showLabel: (Platform.OS !== 'android'), //No label for Android
      labelStyle: {
        fontSize: 11,
      },
      style: {
        backgroundColor: '#fff', // Makes Android tab bar white instead of standard blue
        height: (Platform.OS === 'ios') ? 48 : 50 // I didn't use this in my app, so the numbers may be off. 
      }
    },
});

当我将选项卡放到底部并取下标签后,Android 上的图标看起来不错,这就是我要为我的应用程序做的。许多 Android 应用仅使用文本,因此您也可以这样做。但是您仍然可能不得不将它们放到底部。我知道这不是一个长期的解决方案,因为我希望能够自由地将选项卡放在 Android 的顶部并让它们适合! las,这是我现在的技巧。祝你好运!

评论here指出我们可以在两个平台之间切换styles.Just使用这个:

TabNavigator({
  Home: {
    screen: MyHomeScreen,
  },
  Notifications: {
    screen: MyNotificationsScreen,
  },
}, {
    ...TabNavigator.Presets.iOSBottomTabs
})

有完全相同的问题,我通过向 tabBarOptions 添加一个额外的属性并使用 RN 屏幕宽度属性解决了这个问题。

首先你需要抓取屏幕宽度。

import {Dimensions} from 'react-native'
const SCREEN_WIDTH = Dimensions.get('window').width

然后在 tabBarOptions 中为 SCREEN_WIDTH 添加一个 tabStyle 道具,并将其除以您拥有的选项卡数量。有点硬编码,但对我来说效果很好!

tabBarOptions{
  tabStyle: {
    width:SCREEN_WIDTH/2 //-> e.g number of tabs
  }
}

在 reactnavigation 中,6 个选项卡选项已被删除。现在您有了一组新的可用选项。 对于样式,您可以使用

tabBarStyle : {
     height: 150,
}

这是所有 options 的列表。