【问题标题】:Android - change button text size when orientation changesAndroid - 方向更改时更改按钮文本大小
【发布时间】:2020-05-08 02:33:42
【问题描述】:

我有一个按钮(它是一个 Bootstrap 按钮,基于 com.beardedhen:androidbootstrap)。

这是xml文件中的布局宽度和高度:

android:layout_width="0dp"
android:layout_height="wrap_content"

我想要的是在方向改变时修改按钮文本的文本大小(并且还取决于各种屏幕大小)。

我想这样做是因为在横向上,按钮比纵向有更多空间。

我读到每次方向改变时都会调用 onCreate。

我在 onCreate 中使用以下代码:

DisplayMetrics dm = new DisplayMetrics();
float height = dm.heightPixels;
float width = dm.widthPixels;
BootstrapButton btn = findViewById(R.id.btn);
float density = getResources().getDisplayMetrics().density;
btn.setTextSize((width / density) / 32);

代码计算屏幕的宽度和高度,并相应地设置文本大小。 这样,我可以根据设备的屏幕及其方向(宽度变为高度,反之亦然)获得正确的文本大小。

问题是当方向改变时这段代码不起作用。

我错过了什么?

感谢大家的帮助。

【问题讨论】:

    标签: android orientation text-size screen-density


    【解决方案1】:

    您应该阅读 Android 的 Constraint Layout。在布局编辑器中,您可以指定按钮的约束条件,并定义它在不同布局和屏幕尺寸下的外观。

    另外请注意,虽然您编写的代码可能有效,但手动计算屏幕密度是一项危险且棘手的任务,应尽可能避免。正是出于这个原因,Android 使用dp 而不是px。你写的代码应该用在你必须在pxdp之间转换的情况下,或者其他复杂的情况下。像根据屏幕大小调整按钮大小这样的事情非常常见,Android 提供了直接在布局编辑器中执行此操作的方法。

    【讨论】:

      【解决方案2】:

      虽然我认为这不是最好的方法,但ConstraintLayouts 可以帮助自动管理宽度。
      但是如果你想坚持这种方法,试试这个:而不是onCreate,尝试在onConfigurationChanged中这样做。类似于:

      Activity 类

      override fun onConfigurationChanged(newConfig: Configuration?) {
          super.onConfigurationChanged(newConfig)
      
          if (newConfig?.orientation == Configuration.ORIENTATION_LANDSCAPE) {
              // Do Landscape calculation
          }
          else {
              // Do Portrait calculation
          }
      }
      

      AndroidManifest.xml
      <activity android:name="[.YourActivity]" android:configChanges="orientation|keyboardHidden|screenSize" />

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-04
        • 2017-09-03
        • 2017-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多