【问题标题】:Increase the font size based on the size of the device根据设备大小增加字体大小
【发布时间】:2019-11-11 21:10:56
【问题描述】:

我计划在不同的设备大小上为 textview 使用不同的字体大小,以使字母清晰。我已经决定不对不同的设备使用不同的布局,而是建立了一个通用的布局来适应所有的设备。现在唯一的问题是文本大小。

问题:

  1. 我想就如何根据设备的大小(物理大小)更改字体大小获得您的技术建议。

  2. 如何根据纵横比推导字体大小。

  3. 使用这种方法有什么缺陷吗?

文本视图的 XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tvValue4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="I planned to use different font size for the textview on different device size so as to make the letters legible. I have already decided not to use different layouts for different devices and built a common layout to fit in all the devices. Now the only problem is on the text size."
        android:textColor="#000000"
        android:textSize="15sp" />

</LinearLayout>

提前致谢

【问题讨论】:

    标签: android textview


    【解决方案1】:

    是的,这种方法是有缺陷的。 Android 设备有不同的尺寸,但它们的密度也可能大不相同。

    您应该只遵循 Android 设计 best practices

    他们实际上是经过深思熟虑的。为什么要重新发明轮子?

    【讨论】:

    • picpaste.com/Untitled1-4MSIpnIo.png 请查看我使用 15dp 作为 textview 的屏幕截图。但这在不同设备中以不同数量的行显示。我需要让所有屏幕的行数都相同。如果屏幕尺寸小字体必须小,如果屏幕尺寸大则字体必须变大..请提出您的建议
    • 参见developer.android.com/training/multiscreen/screendensities.html dp 是一个与密度无关的像素,对应于 160 dpi 像素的物理尺寸。 sp 是相同的基本单位,但按用户首选的文本大小(它是与比例无关的像素)进行缩放,因此在定义文本大小时应使用此度量单位(但绝不用于布局大小)。
    【解决方案2】:

    试试这个,在你的 xml 中添加这个属性。它会根据屏幕大小调整文本大小试试看。

     style="@android:style/TextAppearance.DeviceDefault.Medium"
    

    【讨论】:

    • 这可从 API 14 获得。我正在使用 min API 8
    • 我必须把这个放在哪里?在父布局中还是在组件中?
    【解决方案3】:

    对于字体大小,请使用缩放像素 (sp)。 Android 将根据设备密度相应地缩放字体大小。上面的帖子有更好的解释和推理。

    【讨论】:

    • 我改成了sp。但仍然是同样的问题。基本上我需要让这个文本视图在所有设备中占据相同百分比的屏幕并用文本填充它
    • 您是通过编程方式还是从 xml 设置字体大小?
    • 尝试通过计算设备密度和您要设置的适当字体大小以编程方式进行。 int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, , getResources().getDisplayMetrics());您也可以检查 Complex_unit_sp。
    • int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, , getResources().getDisplayMetrics());您可以将 设置为适合您进行测试的任何内容。例如:textView.setTextSize(height);
    【解决方案4】:
        String s= "hello";
        TextView tv= (TextView) findViewById(R.id.tv);
        Spannable span = new SpannableString(s);
        span.setSpan(new RelativeSizeSpan(5f), 0, span.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.setText(span);
    

    根据屏幕大小将 5f 更改为您想要的任何值。

    http://developer.android.com/guide/practices/screens_support.html。检查标题最佳做法

    下的主题。

    【讨论】:

    • 这与 tv.setTextSize(size) 有何不同
    • 您在 textview 中为特定单词设置 textsize。如果您不需要相同字体大小的 textview 中的整个文本,则可以使用它。如果你是 2 个单词 hello world,你可以增加 hello 的字体大小,保持单词大小不变。
    • RelativeSizeSpan 构造函数取 (5f) 的值如何转换为 sp?会有多少sp?或者我该如何计算?
    • @GoranHoriaMihail 你可以通过RelativeSpan的源代码。而且这个答案效率不高,但很久以前就得到了回答。 grepcode.com/file/repository.grepcode.com/java/ext/…
    【解决方案5】:

    适用于 API 26 及更高版本

    <?xml version="1.0" encoding="utf-8"?>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:autoSizeTextType="uniform" />
    

    来源:https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview

    【讨论】:

      【解决方案6】:

      Android 已经为这个-dp 和sp 内置了功能。 dp 是设备像素。它基本上是 1dp=1/160 英寸。这允许您以实际大小指定字体的高度。 Sp 是缩放的像素。此大小基于默认字体大小进行缩放,因此用户可以放大他的系统字体并且您的应用程序会匹配它。对于需要大文本而不占用屏幕空间的有视力问题的人来说非常方便。

      您可能应该使用其中一种或另一种。

      【讨论】:

      • picpaste.com/Untitled1-4MSIpnIo.png 请查看我为 textview 使用 15dp 的屏幕截图。但这在不同设备中以不同数量的行显示。我需要让所有屏幕的行数都相同。如果屏幕尺寸小字体必须小,如果屏幕尺寸大则字体必须变大..请通过您的建议 - iappmaker
      • dp(或 dip)是与设备无关的像素,而不是“设备像素”。请参阅developer.android.com/guide/topics/resources/… 您帖子的其余部分大约每英寸 160 个点,其他所有内容大多是正确的。我只是在迂腐。
      【解决方案7】:

      对于这个问题,我在很多项目中都使用了以下库,并且相信这太棒了。无需担心屏幕。但同样,您需要为选项卡创建单独的布局。

      https://github.com/intuit/sdp

      【讨论】:

      • 这个比较适合作为评论。
      猜你喜欢
      • 2021-03-25
      • 2019-08-18
      • 2020-08-21
      • 2015-09-09
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-27
      相关资源
      最近更新 更多