当前位置: 首页 > 知识库问答 >
问题:

对于Android的adjustsFontSizeToFit,有其他选择吗?

鲜于玮
2023-03-14

我在文本字段中使用flex来显示我的值/范围。对于IOS,我使用属性adjustsFontSizeToFit和文本的minimumFontScale属性来实现理想的字体大小和缩放。我希望为Android启用相同的缩放。有人使用Android的任何技巧吗?

<View style={{flex: 40}}>
  {
   (Platform.OS === 'ios') ?
    <Text style={{flex: 1, paddingRight: 2}} adjustsFontSizeToFit 
    minimumFontScale={0.5}>
     //if decimal value exists show range
     (pointFivePart_1 === '5') ? 
        <Text style={{ flexDirection: 'row' }} >
          <Text style={styles.mainValueStyle}>{first_1}</Text>
          <Text style=styles.decimalValueStyle}> .pointFivePart_1}</Text>
          <Text style={styles.mainValueStyle}>&deg;</Text>
         </Text>
         : <Text style={styles.mainValueStyle} >{min}&deg;</Text>
        }
        //if two values then show the second value as range
{// render largest value if different than min
            (maxSet === minSet) ? null : (
                (pointFivePart_2 === '5') ?
                <Text style={{ flexDirection: 'row' }} >
                    <Text style={styles.mainValueStyle}> - {first_2}</Text>
                    <Text style={styles.decimalValueStyle}>.{pointFivePart_2}</Text>
                    <Text style={styles.mainValueStyle}>&deg;</Text>
                    </Text>
                :
                    <Text style={styles.mainValueStyle} > - {maxSet}&deg;</Text>
                    )
                }
                </Text>
                :
                //same styling for android

共有3个答案

陈毅
2023-03-14

我使用的是@nazar解决方案的略微修改版本。我无法按需缩放,文本会被切断,因为基于屏幕设备的动态高度会对fontSize影响太大。

无论如何,这是我的解决方案。

var fontSize = width / text.length;
var maxSize = width / 5;
fontSize = Math.min(fontSize, maxSize);

最大字体大小由5个字母定义。在这种情况下,字母越少,fontSize就越大。这个值当然可以是任何值。您可以用这个函数创建一个简单的函数,并使用width参数在任何需要的地方调用它,这与屏幕很相似。width*0.1,第二个参数是文本的长度,第三个参数是maxSize。这样的话:

export function GetFontSize(width, length, max) {      
    var fontSize = width / length;

    var maxSize = width / max;
    fontSize = Math.min(fontSize, maxSize);

    return fontSize;
}
齐坚成
2023-03-14

只需设置adjustFontSizeToFit和numberOfLines DONT设置字体大小

<Text adjustsFontSizeToFit numberOfLines={1}>This text will fit the width of the container</Text>
凤自珍
2023-03-14

简单但不知何故可行的解决方案(跨平台):

fontSize = Math.sqrt(textWidth*textHeight/text.length)

其中textWidth,textHeight -文本组件的大小,text.length -文本的长度。

最小字体规模可以通过以下方式实现

fontSize = Math.max(fontSize,minimumFontSize)

通过解这样的方程组,我得出了这个公式:

lettersInLine = textWidth/fontSize
lines = textLength/lettersInLine
lines*fontSize = textHeight

这里假设字体是方形的(宽度等于高度)。

尽管这个公式即使没有方程式也是有意义的。你只是

  1. 计算整个文本元素的平方
  2. 计算每个字母的平方(将整个平方除以字母数)
  3. 从字母方根取平方根以获得字体大小
 类似资料:
  • 问题内容: 我需要具有2个字段的django modelform,其中第二个字段选择列表取决于在第一个字段中选择的内容。我的模特: 如果vehicle_type设置为 personal, 如何将 make 字段的选择设置为 PERSONAL_MAKES ?我怎样才能做到这一点?在模型级别上可以吗? __ 问题答案: 您可能不能,因为这取决于用户与表单的交互:您的服务器无法预先知道用户将表单发送到浏

  • 我希望,如果我选择“mammals”,动物选择选项只显示值为1的选项data-animal_class。 我知道如何获得哺乳动物值,但我不知道如何使用过滤器 这是我的代码:

  • 我有一个JTable,在一列中,我为每行都有一个JComboBox。我在按下按钮时动态添加行。在组合框中所做的选择将确定对该特定行执行的计算。为了参数起见,假设组合框的选项是:选项1,选项2,选项3和选项4。 我遇到的问题如下: 假设我添加了2行,并从第1行的组合框中选择任何选项,当我去第2行的组合框中进行选择时,勾选与第1行相同的选择。似乎有某种记忆。如何禁用此功能,以便默认选择始终为-1(即非

  • 我想知道如何检索Firestore收藏中的所有其他文档。我有一个包含日期字段的文档集合。我想按日期对它们进行排序,然后从排序后的集合中的每个X大小的块中检索1个文档。我大约每10秒钟就添加一个新文档,并试图在前端显示历史数据,而不必下载这么多记录。

  • 问题内容: 如何以方便的方式选择表中的所有列和聚合函数? 也就是说,我有一个包含100列的表格,我想发送以下内容 谢谢! 问题答案: 要从表中选择所有列,请执行以下操作: 要从表中选择一个最大值是 两者结合: 如果要在结果行中省略column44并且仅具有maxcol44,则必须列出这些列:

  • 问题内容: 我想从列中选择结果,但我需要相应的和。 结果集只需要显示一个,但显示为1且a 为Doe。 问题答案: 试试这个查询