Android-方向改变时更改按钮文本大小

Android-方向改变时更改按钮文本大小,android,orientation,text-size,screen-density,Android,Orientation,Text Size,Screen Density,我有一个按钮(它是一个引导按钮,基于com.beardedhen:androidbootstrap) 这是xml文件中的布局宽度和高度: android:layout_width="0dp" android:layout_height="wrap_content" 我想要的是在方向改变时修改按钮文本的文本大小(也取决于各种屏幕大小) 我之所以想这样做,是因为在风景画上,按钮比肖像画有更多的空间 我了解到每次方向改变时都会调用onCreate 我在onCreate中使用以下代码: Display

我有一个按钮(它是一个引导按钮,基于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的。在布局编辑器中,您可以指定按钮上的约束,并定义它在不同布局和屏幕大小中的外观


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

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

活动类

override fun onConfigurationChanged(newConfig: Configuration?) {
    super.onConfigurationChanged(newConfig)

    if (newConfig?.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        // Do Landscape calculation
    }
    else {
        // Do Portrait calculation
    }
}
AndroidManifest.xml