【问题标题】:Text doesn't have same size on different emulators不同模拟器上的文本大小不同
【发布时间】:2021-12-29 22:29:47
【问题描述】:

模拟器 1:

模拟器 2

如何在不同模拟器上的按钮上保持相同的文本大小? 我正在使用这些代码行来设置保持比率的相对大小,但是当我在 2 个不同的模拟器(真正的模拟器)上运行程序时,文本会变得疯狂

代码片段

    btn_play_game1.post(new Runnable() {
        @Override
        public void run() {
            btn_play_game1.setTextSize((float) (btn_play_game1.getHeight() * btn_play_game1.getWidth() * 0.00013));
        }
    });

我还在我的 xml 文件中使用 LinearLayout,如果这很重要的话。

【问题讨论】:

    标签: android android-studio button text size


    【解决方案1】:

    你打电话给setTextSize(float)

    将默认文本大小设置为给定值,解释为“缩放像素”单位。 此大小根据当前密度和用户字体大小偏好进行调整

    假设两个模拟器都设置为相同的系统字体大小(这也会使文本变大或变小),问题是您已经通过以像素为单位的按钮尺寸提供了最终的缩放大小。但该方法需要sp 中的大小,这是一个与密度无关的大小,将根据设备的屏幕密度用户的字体偏好进行缩放。所以屏幕分辨率越高,放大的越多

    这里有三个选项:

    • 您可以使用此方法并计算出要使用的正确sp 值(取决于文本应该看起来有多大,尝试 24 并从那里开始) - 这将再次根据用户的偏好而变大或变小
    • 使用setTextSize(int, float) 方法并将TypedValue.COMPLEX_UNIT_PX 传递给第一个参数,并将您的从像素计算的大小作为第二个参数。这样,文本大小将始终与您计算它的方式与您的按钮大小成正比,并且用户的字体大小首选项不会进入其中。您必须更改 0.00013 值,因为这正是您传递 sp 值时发生的事情
    • 如果可以的话,或者只在 XML 中定义文本大小(例如,如果按钮是固定大小)。如果您希望它占用固定数量的空间(无用户缩放),请使用 dp 值而不是 sp - 某些文本不需要缩放

    这也是计算比率的一种奇怪方式,我认为在这种情况下,您通常只取高度的一小部分以保持一致性,或者如果宽度可变,则使用 minOf(height, width) 做一些事情 - 但是你是进入测量文本的复杂性以查看它需要适合的内容,让布局系统处理所有这些更容易。有很多方法可以在 XML 中实现,但这是另一回事

    【讨论】:

      【解决方案2】:

      这可能是因为您使用 sp 单位设置了文本大小。该单元基于屏幕而不是物理单元。您应该使用基于物理单位的单位来在每个设备上获得相同的视图。 您可以使用 mm(毫米)、in(英寸)或 pt(点,我认为是 1/62 英寸)

      【讨论】:

      • 它不起作用。
      • dp 是一个物理单位(1/160 英寸),sp 只是一个根据用户的字体大小选择缩放的dp 值。
      • 考虑改用 dp
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多