【问题标题】:Different textsize for each screen orientation?每个屏幕方向的不同文本大小?
【发布时间】:2013-02-03 13:22:45
【问题描述】:

我正在开发一个计算器,在横向上我正在添加更多按钮,因此每个按钮都会变得更小以适应额外的按钮。

此时我只使用较小的字体大小,因此它们适合横向模式下的较小按钮,但是我希望纵向上的文本比横向上的文本更大。

我一直在尝试找出一种简单的方法来根据屏幕方向使用不同的主题,但我还没有找到一种简单的方法来做到这一点。为横向样式创建不同的文件夹/values-land/style.xml 不起作用,因为该主题仅在应用重新启动时应用。

如何根据屏幕方向使用不同的字体大小/主题?

【问题讨论】:

  • 您可以尝试使用名为“values”和“values-land”的文件夹并在每个文件夹中定义一个主题。
  • 这样做的问题是应用程序需要重新启动。我在清单文件上使用 android:configChanges="keyboardHidden|orientation|screenSize" 以防止在旋转时重新启动。如果我不这样做,我的计算值将在屏幕旋转时被删除

标签: java android


【解决方案1】:

我建议使用为纵向和横向定义字体大小的目录。例如:

values/dimen.xml
values-land/dimen.xml

在每个 dimen.xml 文件中,您都会为按钮定义字体大小。

values/dimen.xml:
    <dimen name="button_fontSize">12sp</dimen>

values-land/dimen.xml
    <dimen name="button_fontSize">24sp</dimen>

当启动活动或旋转设备时,您的 xml 布局将获取适合当前方向的字体大小。

编辑:为了响应您使用android:configChanges 来捕获计算器显示,我想提供一个更易于实施和简化编码的替代方案。

在下面的示例中,我假设您的计算屏幕包含一个名为 calcDisplayTextView

protected void onSaveInstanceState(Bundle outState) {
    // Save the calculator display text.
    outState.putString("displayText", calcDisplay.getText());
}

protected void onCreate(Bundle savedInstanceState) {

    // ...

    // Restore the calculator display text.
    if (savedInstanceState != null) {
        String displayText = savedInstanceState.getString("displayText");
        calcDisplay.setText(displayText);
    }
}

使用此代码,设备不仅会在旋转时自动恢复计算器显示文本,而且由于 Activity 被销毁并重新创建,因此也会加载您想要的字体大小。

【讨论】:

  • 这样做的问题是需要重启hte app。我在清单文件中使用android:configChanges="keyboardHidden|orientation|screenSize" 来防止这种情况。如果我不这样做,我的计算值将在屏幕旋转时被删除
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2012-03-29
相关资源
最近更新 更多