每个屏幕方向使用不同的文本大小?

4
我正在开发一个计算器程序,在横屏模式下我会添加更多的按钮,因此每个按钮会变小以适应额外的按钮。
目前我只是使用较小的字体大小,以便在横屏模式下适应较小的按钮,但我希望在纵向模式下的文本比横向模式下的文本要大。
我一直在尝试找出一种简单的方法来根据屏幕方向使用不同的主题,但我没有找到容易的方法。创建一个不同于竖屏样式的文件夹/values-land/style.xml并不能起到作用,因为主题只有在应用程序重新启动时才能应用。
如何根据屏幕方向使用不同的字体大小/主题呢?

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

11

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

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);
    }
}

使用这段代码后,设备不仅可以在旋转时自动恢复计算器显示文本,而且由于活动被销毁并重新创建,你想要的字体大小也将被加载。


1
问题在于应用程序需要重新启动。我在清单文件中使用android:configChanges="keyboardHidden|orientation|screenSize"来防止这种情况发生。如果我不这样做,我的计算值将在屏幕旋转时被擦除。 - lisovaccaro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接