亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

React?Native?中處理?Android?手機(jī)吞字的解決方案

 更新時(shí)間:2022年08月04日 08:53:50   作者:todoit  
這篇文章主要介紹了React?Native?中處理?Android?手機(jī)吞字的解決方案,作者在 React Native 0.67.4 環(huán)境下,編寫(xiě)了一個(gè)小 demo 來(lái)復(fù)現(xiàn)這個(gè)問(wèn)題,需要的朋友可以參考下

React Native App 在部分型號(hào)的 Android 手機(jī)上,可能會(huì)發(fā)生文字顯示不全的問(wèn)題。

官方也有一個(gè) 相關(guān)的 Issue ,并提供了如下的解決方案:

const defaultFontFamily = {
  ...Platform.select({
    android: { fontFamily: "" },
  }),
}

const oldRender = Text.render
Text.render = function (...args) {
  const origin = oldRender.call(this, ...args)
  return React.cloneElement(origin, {
    style: [defaultFontFamily, origin.props.style],
  })
}

但是升級(jí) React Native 到 0.66 之后,上面這個(gè)方法就不起作用了。

復(fù)現(xiàn)問(wèn)題

作者在 React Native 0.67.4 環(huán)境下,編寫(xiě)了一個(gè)小 demo 來(lái)復(fù)現(xiàn)這個(gè)問(wèn)題,如下:

function IncompleteText() {
  return (
    <View style={styles.container}>
      <View style={styles.row}>
        <Text style={styles.text}>我在左邊 完整</Text>
        <Text style={styles.text}>我在右邊 完整</Text>
      </View>
      <View style={styles.row}>
        <Text style={styles.text}>12345</Text>
        <Text style={styles.text}>67890</Text>
      </View>
      <View style={styles.row}>
        <Text style={styles.text}>abcd</Text>
        <Text style={styles.text}>efgh</Text>
      </View>
      <View style={styles.row}>
        <Text style={styles.text}>今年是 2022 年</Text>
        <Text style={styles.text}>虧了好多 ¥</Text>
      </View>
    </View>
  )
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
  },
  row: {
    marginTop: 16,
    marginHorizontal: 24,
    flexDirection: "row",
    alignItems: "center",
    justifyContent: "space-between",
    height: 60,
    backgroundColor: "#f5f5f5",
  },
  text: {
    fontSize: 18,
    color: "#333333",
    fontWeight: "normal",
    // fontFamily: 'DFWaWaSC-W5',
    backgroundColor: "yellow",
  },
})

當(dāng) Text 中的文本同時(shí)符合以下兩個(gè)條件時(shí),在部分 Android 手機(jī)上會(huì)出現(xiàn)文字顯示不全的問(wèn)題。

fontWeight

譬如作者這臺(tái)手機(jī):

手機(jī)型號(hào)MIUI 版本Android 版本
MI 812.5.210

就會(huì)出現(xiàn)文字顯示不全的問(wèn)題,即使將 fontWeight 設(shè)置為 bold ,也不會(huì)有粗體效果。

但是只要 style 設(shè)置了 fontFamily ,就不會(huì)有顯示不全的問(wèn)題,因此,怎樣才能正確地設(shè)置 fontFamily 呢?

解決問(wèn)題

stack overflow 上,有人問(wèn) How to set default font family in React Native? 

在該問(wèn)題的討論列表中,作者找到了適合 React Native 0.66 以上版本的解決方案,如下:

// text-polyfill.ts
import React from "react"
import { Platform, StyleSheet, Text, TextProps } from "react-native"

const defaultFontFamily = {
  ...Platform.select({
    android: { fontFamily: "" },
  }),
}

// @ts-ignore
const __render: any = Text.render

// @ts-ignore
Text.render = function (props: TextProps, ref: React.RefObject<Text>) {
  if (Platform.OS === "ios") {
    return __render.call(this, props, ref)
  }

  const { style, ..._props } = props
  const _style = StyleSheet.flatten(style) || {}
  return __render.call(
    this,
    { ..._props, style: { ...defaultFontFamily, ..._style } },
    ref
  )
}

示例

這里有 一個(gè)示例 ,供你參考。

到此這篇關(guān)于React Native 中處理 Android 手機(jī)吞字的解決方案的文章就介紹到這了,更多相關(guān)React Native Android 手機(jī)吞字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論