อัปเดต 2017: {"orientation": "portrait"}
ปัจจุบันคำแนะนำ React Native อย่างเป็นทางการจำนวนมากเช่นนี้แนะนำให้ใช้ Expo เมื่อสร้างแอป React Native ดังนั้นนอกเหนือจากคำตอบที่มีอยู่แล้วฉันยังจะเพิ่มโซลูชันเฉพาะงาน Expo ซึ่งเป็นที่น่าสังเกตเพราะใช้ได้กับทั้ง iOS และ Android และคุณจะต้องทำเท่านั้น ตั้งค่าได้ครั้งเดียวโดยไม่ต้องวุ่นวายกับ XCode config, AndroidManifest.xml เป็นต้น
การตั้งค่าการวางแนวในเวลาสร้าง:
หากคุณกำลังสร้างแอป React Native ด้วย Expo คุณสามารถใช้orientation
ฟิลด์ในapp.json
ไฟล์ของคุณได้ตัวอย่างเช่น:
{
"expo": {
"name": "My app",
"slug": "my-app",
"sdkVersion": "21.0.0",
"privacy": "public",
"orientation": "portrait"
}
}
มันสามารถตั้งค่าให้"portrait"
, "landscape"
หรือ"default"
ซึ่งหมายถึงการที่มีการล็อค autorotate ปฐมนิเทศไม่มี
การตั้งค่าการวางแนวที่รันไทม์:
คุณยังสามารถแทนที่การตั้งค่านั้นในรันไทม์ได้ด้วยการรันตัวอย่างเช่น:
Expo.ScreenOrientation.allow(Expo.ScreenOrientation.Orientation.LANDSCAPE);
โดยที่อาร์กิวเมนต์สามารถ:
ALL
- ทั้ง 4 ทิศทางที่เป็นไปได้
ALL_BUT_UPSIDE_DOWN
- ทั้งหมดยกเว้นแนวตั้งย้อนกลับอาจเป็นได้ทั้ง 4 ทิศทางบนอุปกรณ์ Android บางรุ่น
PORTRAIT
- การวางแนวตั้งอาจเป็นภาพย้อนกลับบนอุปกรณ์ Android บางรุ่น
PORTRAIT_UP
- ภาพกลับหัวเท่านั้น
PORTRAIT_DOWN
- คว่ำภาพเท่านั้น
LANDSCAPE
- แนวนอนใด ๆ
LANDSCAPE_LEFT
- แนวนอนด้านซ้ายเท่านั้น
LANDSCAPE_RIGHT
- แนวนอนด้านขวาเท่านั้น
ตรวจจับการหมุน:
เมื่อคุณอนุญาตให้มีการวางแนวมากกว่าหนึ่งแนวคุณสามารถตรวจจับการเปลี่ยนแปลงโดยฟังchange
เหตุการณ์บนDimensions
วัตถุ:
Dimensions.addEventListener('change', (dimensions) => {
// you get:
// dimensions.window.width
// dimensions.window.height
// dimensions.screen.width
// dimensions.screen.height
});
หรือคุณยังสามารถเพียงแค่ได้รับมิติทุกเวลาด้วยDimensions.get('window')
และDimensions.get('screen')
เช่นนี้
const dim = Dimensions.get('window');
// you get:
// dim.width
// dim.height
หรือ:
const dim = Dimensions.get('screen');
// you get:
// dim.width
// dim.height
เมื่อคุณฟังเหตุการณ์คุณจะได้รับทั้งสองอย่างwindow
และscreen
ในเวลาเดียวกันนั่นคือสาเหตุที่คุณเข้าถึงเหตุการณ์นั้นแตกต่างกัน
เอกสารประกอบ:
ดูข้อมูลเพิ่มเติมได้ที่: