【问题标题】:How to set text size of textview dynamically for different screens [duplicate]如何为不同的屏幕动态设置textview的文本大小[重复]
【发布时间】:2019-11-19 21:18:09
【问题描述】:

我正在创建一个文本视图并动态添加到布局中。我正在使用textView.setTextSize(18)方法来设置文本大小。我在三星平板电脑上测试过,发现这个屏幕的字体太小了,然后我将文本大小更改为25,但对于模拟器来说太大了(480 * 800 )。我的问题是动态设置文本大小,使其适合所有屏幕。

【问题讨论】:

  • 但是这个问题的标题比重复的更完美
  • @vnshetty 谢谢,已编辑。

标签: android


【解决方案1】:

编辑: 当我现在在 StackOverflow 上搜索时,我发现 This Question is Duplicate ofThisThis

你需要像这样使用另一个函数setTextSize(unit, size)和单元SP

tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);

请阅读更多关于 TypedValue 常量的信息。

【讨论】:

  • 我觉得你的回答不好。来自dimens.xml的更好的使用价值
  • 只有这种方式对我有效,其他方法都使文本变得非常大!
  • 这应该是公认的答案!
【解决方案2】:

您应该使用资源文件夹,例如

values-ldpi
values-mdpi
values-hdpi

并在“dimensions.xml”文件中为每个范围写入文本大小。

在java代码中你可以设置文本大小

textView.setTextSize(getResources().getDimension(R.dimen.textsize));

示例尺寸.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="textsize">15sp</dimen>
</resources>

【讨论】:

  • 能否举个例子来写dimensions.xml文件
  • 如果尺寸在 sp 中指定,则可能不需要 DPI 限定符,因为它们按屏幕密度(和用户首选字体大小)缩放。
  • DP不是比SP好吗?以上是否适用于这个问题:stackoverflow.com/questions/18497760/…
  • 使用这种方法,文字看起来很大。
  • 其实需要textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.textsize));
【解决方案3】:

在这种情况下,可能不需要使用 ldpimdpihdpi 限定符。

当您在资源文件中定义维度时,您会包含测量单位。如果您使用 sp 单位,它们会根据屏幕密度进行缩放,因此 15sp 的文本在不同密度的屏幕上应该显示大致相同的大小。
(设备的实际屏幕密度不会与 Android 概括的完全匹配屏幕密度分为120, 160, 240, 320, 480 and 640 dpi 组。)

当调用getResources().getDimension(R.dimen.textsize) 时,它将返回以像素为单位的大小。如果使用 sp 会根据屏幕密度进行缩放,

调用setText(float) 设置sp units 中的大小。这就是问题所在,
一方面有像素测量值,另一方面有sp unit 来解决此问题:

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
    getResources().getDimension(R.dimen.textsize));

注意你也可以使用

getResources().getDimensionPixelSize(R.dimen.textSize);

而不是getDimension(),它将四舍五入并转换为非小数值。

【讨论】:

    【解决方案4】:

    这个问题卡了好久,终于这样解决了

    textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
                  getResources().getDimension(R.dimen.textsize));
    

    创建这样的文件夹res/values/dimens.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
      <dimen name="textsize">8sp</dimen>
    
     </resources>
    

    【讨论】:

    • 为什么是 TypedValue.COMPLEX_UNIT_PX 而现在是 TypedValue.COMPLEX_UNIT_SP?
    • 谢谢,对我很有用。
    • 我们需要在哪里创建dimen文件夹?
    • @SudarshanTaparia 在此处创建文件夹 res/values/dimens.xml 并添加您的文本大小。
    【解决方案5】:

    在 Style.xml 中预定义样式:

    <style name="largeText">
        <item name="android:textAppearance">@android:style/TextAppearance.Large.Inverse</item>
        <item name="android:textStyle">bold</item>
    </style>
    

    在代码中:

    text.setTextAppearance(context, R.style.largeText);
    

    【讨论】:

    • 如何自定义 largeText 的尺寸测量?
    【解决方案6】:

    我认为您应该使用 textView.setTextSize(float size) 方法来设置文本的大小。 textView.setText(arg) 用于设置文本视图中的文本。

    【讨论】:

    • Android 文本大小将始终在 sp 中指定,而不是在 dp 或 float 值中指定
    【解决方案7】:
    float currentSize = textEdit.getTextSize(); // default size
    float newSize = currentSize * 2.0F; // new size is twice bigger than default one
    textEdit.setTextSize(newSize);
    

    【讨论】:

    • 我在这个答案中没有看到任何考虑屏幕尺寸的因素。
    • 在我看来,问题在于字体大小。所以我不明白你为什么抱怨没有提到屏幕尺寸。在大多数情况下,默认字体具有适当的大小。因此,最好根据更大/更小的默认大小来考虑字体大小,即独立于屏幕大小。所以我写了一个解决方案,可以用来设置相对于默认字体大小的字体大小。
    猜你喜欢
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多