PixelRatio
PixelRatio
讓您可以存取裝置的像素密度和字體縮放比例。
取得正確尺寸的圖片
如果您的裝置具有高像素密度,則應取得更高解析度的圖片。一個好的經驗法則是將您顯示的圖片尺寸乘以像素比。
const image = getImage({
width: PixelRatio.getPixelSizeForLayoutSize(200),
height: PixelRatio.getPixelSizeForLayoutSize(100),
});
<Image source={image} style={{width: 200, height: 100}} />;
像素格線對齊
在 iOS 中,您可以指定元素的精確位置和尺寸,例如 29.674825。但是,最終物理顯示器只有固定數量的像素,例如 iPhone SE(第 1 代)為 640×1136,iPhone 11 為 828×1792。iOS 盡可能忠實於使用者值,方法是將一個原始像素分散到多個像素中以欺騙眼睛。此技術的缺點是它會使產生的元素看起來模糊。
在實務中,我們發現開發人員不想要此功能,他們必須透過手動捨入來解決此問題,以避免元素模糊。在 React Native 中,我們會自動捨入所有像素。
我們必須小心何時進行此捨入。您永遠不希望同時使用捨入值和未捨入值,因為您會累積捨入誤差。即使只有一個捨入誤差也是致命的,因為一個像素的邊框可能會消失或變成兩倍大。
在 React Native 中,JavaScript 和佈局引擎中的所有內容都使用任意精度的數字。只有當我們在主線程上設定原生元素的位置和尺寸時,我們才會進行捨入。此外,捨入是相對於根元素而不是父元素完成的,這也是為了避免累積捨入誤差。
範例
參考
方法
get()
static get(): number;
返回裝置像素密度。一些範例
PixelRatio.get() === 1
PixelRatio.get() === 1.5
PixelRatio.get() === 2
- iPhone SE, 6S, 7, 8
- iPhone XR
- iPhone 11
- xhdpi Android 裝置
PixelRatio.get() === 3
- iPhone 6S Plus, 7 Plus, 8 Plus
- iPhone X, XS, XS Max
- iPhone 11 Pro, 11 Pro Max
- Pixel, Pixel 2
- xxhdpi Android 裝置
PixelRatio.get() === 3.5
- Nexus 6
- Pixel XL, Pixel 2 XL
- xxxhdpi Android 裝置
getFontScale()
static getFontScale(): number;
返回字體大小的縮放比例。這是用於計算絕對字體大小的比率,因此任何嚴重依賴它的元素都應使用它來進行計算。
- 在 Android 上,數值反映使用者在設定 > 顯示 > 字體大小中設定的偏好
- 在 iOS 上,數值反映使用者在設定 > 顯示與亮度 > 文字大小中設定的偏好,數值也可以在設定 > 輔助使用 > 顯示與文字大小 > 更大文字中更新
如果未設定字體縮放比例,則返回裝置像素比。
getPixelSizeForLayoutSize()
static getPixelSizeForLayoutSize(layoutSize: number): number;
將佈局尺寸 (dp) 轉換為像素尺寸 (px)。
保證返回整數。
roundToNearestPixel()
static roundToNearestPixel(layoutSize: number): number;
將佈局尺寸 (dp) 四捨五入到最接近的佈局尺寸,該尺寸對應於整數像素。例如,在像素比為 3 的裝置上,PixelRatio.roundToNearestPixel(8.4) = 8.33
,這正好對應於 (8.33 * 3) = 25 像素。