我在 View 内部缩放字体时遇到问题,或者更好的是在 React Native for Android 的 Text 组件内部缩放字体。问题是,我希望文本组件内部的文本根据字符串的长度自动缩放(如果文本可以适合所需字体大小的 View ,则不执行任何操作,如果字符串对于此字体大小来说太长,则设置较小的字体大小)。
例如:
1.
<View style={{flexDirection: 'row'}}>
<Text numberOfLines={1} style={{fontSize: 20}}>This is in one row.</Text>
</View>
在这种情况下 (1.) 文本将呈现在一行中,字体大小为 22。
2.
<View style={{flexDirection: 'row'}}>
<Text numberOfLines={1} style={{fontSize: 20}}>This is in one row and much longer text inside of Text component.</Text>
</View>
在第二 (2.) 场景中,文本将呈现在一行中,末尾带有 ...,字体大小也为 20。但是,如果内容无法容纳在一行文本中,我希望字体自动缩小成分。
我搜索解决方案,发现对于 iOS,您可以使用 Text 中的属性轻松解决此问题,如下所示:
<Text adjustsFontSizeToFit minimumFontScale={.4}>Automatically font scale</Text>
这不适用于 Android,所以我真的需要帮助:/
如果有人知道我如何实现字体自动更改大小以适合一行中的文本,我将不胜感激。
提前致谢!
最佳答案
如果您有文本的最大宽度及其以字符为单位的长度,您可以计算适合的字体大小。类似于 textWidth/textLength = fontWidth
。但是,fontWidth(每个字符可用的宽度)极不可能与各自的 fontSize 完全相同。但是如果你找到你的字体中最宽的字符,并且找到它的宽度和fontSize的相关性,你可以通过fontSize/fontWidth = c
计算出fontSize。因此,宽度将始终小于最大值。
例如,我发现对于 Roboto Light 字体,fontSize 为 30 导致 m 的宽度为 28.8px,这是本例中最宽的字符。因此,fontSize 比实际宽度大 30/28,8 倍。所以我们可以通过textWidth/textLength = fontSize/(30/28,8)
如果您的字符有任何额外的间距,可以调整此值,如果您想要最小字体大小,您可以使用 Math.max(updatedFontSize, minimumFontSize)
关于react-native - React Native 字体比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51285345/