android – 如何设计反应原生兼容所有设备的屏幕

我试图设计这个设计反应原生.这就是我为此编写的内容,但这不是我想要的.这仅适用于一个屏幕,如果我更改屏幕大小,则事情不起作用.

这看起来像绝对布局.我应该做些什么改变才能使它适用于所有屏幕尺寸.

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, { Component } from "react";
import {
  AppRegistry,
  Image,
  View,
  Text,
  Button,
  StyleSheet
} from "react-native";

class SplashScreen extends Component {
  render() {
    console.disableYellowBox = true;
    return (
      <View style={styles.container}>
        <Image
          source={require("./img/talk_people.png")}
          style={{ width: 300, height: 300 }}
        />
        <Text style={{ fontSize: 22, textAlign: "center", marginTop: 30 }}>
          Never forget to stay in touch with the people that matter to you.
        </Text>
        <View style={{ marginTop: 60, width: 240 }}>
          <Button title="CONTINUE" color="#FE434C" />
        </View>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    backgroundColor: "#FFFFFF",
    margin: 50,
    alignItems: "center",
    flex: 1,
    flexDirection: "column"
  }
});

AppRegistry.registerComponent("Scheduled", () => SplashScreen);

预期国家:

enter image description here

当前状态:

Nexus 4 – 768×1280

enter image description here

Nexus 6P – 1440×2560
enter image description here

最佳答案
快速回答是在外部容器中使用flex,这样你就可以说:

<View style={{flex: 1}}>
    <View style={{flex: 2}}>
       <.../>//Image
    </View>
    <View style={{flex: 1}}>
       <.../>//Text
    </View>
    <View style={{flex: 1}}>
       <.../>//Button
    </View>
</View>

将容器分成几个部分,将屏幕的上半部分分配给图像,将另外两个部分分配给文本和按钮;您可以根据需要使用填充和边距,并使用您想要的任何比例.

不过,还需要考虑的是屏幕像素密度,这可能会严重影响显示尺寸.我发现有一个外面很方便

import React from 'react';
import { PixelRatio } from 'react-native';
let pixelRatio = PixelRatio.get();

export const normalize = (size) => {
  switch (true){
    case (pixelRatio < 1.4):
        return size * 0.8;
        break;
    case (pixelRatio < 2.4):
        return size * 1.15;
        break;
    case (pixelRatio < 3.4):
        return size * 1.35;
        break;
    default:
        return size * 1.5;
  }
}

export const normalizeFont = (size) => {
  if (pixelRatio < 1.4){
    return Math.sqrt((height*height)+(width*width))*(size/175);
  }
  return Math.sqrt((height*height)+(width*width))*(size/100);
}

我用作的模块

import { normalize, normalizeFont } from '../config/pixelRatio';
const {width, height} = require('Dimensions').get('window');

……对于图像,请说:

<Image source={ require('../images/my_image.png') } style={ { width: normalize(height*.2), height: normalize(height*.2) } } />

和一个字体:

button_text: {
    fontSize: normalizeFont(configs.LETTER_SIZE * .7),
    color: '#ffffff'
},

希望这可以帮助!

编辑:上面的模块对我已经部署的设备有用,但是应该扩展它以允许pixelRatio值从1到4,其中也有一些十进制(例如1.5)值.有一个good chart at this link我正在尝试完成这个,但到目前为止最有效的是我上面发布的.

转载注明原文:android – 如何设计反应原生兼容所有设备的屏幕 - 代码日志