Android React Native的使用細節問題

來源:互聯網
上載者:User

標籤:

踩了幾天React Native Android的坑。總結為一句話,目前android學習react native還為時過早,坑太多,需要你慢慢去踩。就目前來講,能踩的坑基本上都踩了一遍,所以還是等它穩定下來再去學吧,否則會浪費掉一大堆時間。

單位

在React Native中,組件的寬度,高度都是不用寫單位的,你寫個100,在Android中代表的到底是100px還是100dp,就不得而知了,這時候自己實踐一下就一目瞭然了。

var Dimensions = require(‘Dimensions‘);var PixelRatio = require(‘PixelRatio‘);var AwesomeProject = React.createClass({  render: function() {    return (        <Text style={styles.test}>            window.width={Dimensions.get(‘window‘).width+"\n"}            window.height={Dimensions.get(‘window‘).height+"\n"}            pixelRatio={PixelRatio.get()}        </Text>    );  }});

在我的小米3上,輸出的是,而我的小米3的解析度是1080*1920

window.width=360window.height=640pixelRatio=3

顯然輸出的是dp的單位,那麼如果要轉成對應的px的單位怎麼轉呢,答案就在上面的pixelRatio,將dp單位* pixelRatio就是對應的px的值了,同理px/pixelRatio就是對應的dp的值了。和android中px與dp的轉換是一樣的。

圖片
  • 圖片的顯示需要指定寬度和高度,否則不會顯示
  • 圖片資源載入可以從遠處載入,也可以從本地載入

遠處載入的方式如下

<Image source={{uri:‘http://your.host/your.png‘}}

這種方式的優勢是引入方式簡單,更新方便,只需要替換server上的圖片即可,不需要修改原始碼
缺點也很明顯,即初次請求圖片時,需要請求server,圖片過大的,請求的延時會很大

本地載入需要注意的是圖片需要打包,然後據說可以載入手機本地圖片,然而我測試了n遍無果,根本載入不進來

   <Image style={{width:100,height:100}} source={{isStatic: true, uri: ‘/sdcard/icon.png‘ }}/>

除了載入本地資源,還可以載入靜態資源,這個資源需要打包才能使用,也就是不能使用伺服器擷取js的方式,必須打包後放在assets目錄下才能使用,測試後發現也沒有什麼卵用。

    <Image source={ require(‘image!icon‘) } />
系統

如果要判斷當前系統是android還是ios,從而進行一些適配工作,可以使用Platform

var Platform = require(‘Platform‘);var AwesomeProject = React.createClass({  render: function() {    return (        <View>        <Text>          {Platform.OS}        </Text>        </View>    );  }});

如果在android中,介面會輸出android,如果在ios中會輸出ios,當然上面的Platform也可以這麼定義

var {  AppRegistry,  StyleSheet,  Text,  View,  Platform} = React;
Toast的使用

有時候為了方便測試,經常會toast,React Native為android也提供了這麼一個組件ToastAndroid ,使用方法如下

var ToastAndroid = require(‘ToastAndroid‘);ToastAndroid.show(‘提示的資訊‘, ToastAndroid.SHORT);

或者

var {  AppRegistry,  StyleSheet,  Text,  View,  ToastAndroid} = React;ToastAndroid.show(‘提示的資訊‘, ToastAndroid.SHORT);
flex布局
  • View預設寬度為100%
  • 當flexDirection的值為column時, justifyContent:’center’為垂直置中, alignItems:’center’為水平置中
  • 當flexDirection的值為row時, justifyContent:’center’為水平置中, alignItems:’center’為垂直置中
定位
  • 和css的標準不同的是, 元素父容器不用設定position:’absolute|relative’ 。預設相對於父容器進行位移。

Android React Native的使用細節問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.