Android - 方向改变时改变按钮文字大小
Android - change button text size when orientation changes
我有一个按钮(它是一个 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 的 Constraint Layout。在布局编辑器中,您可以指定按钮的约束条件,并定义它在不同布局和屏幕尺寸下的外观。
另请注意,虽然您编写的代码可能有效,但手动计算屏幕密度是一项危险且棘手的任务,应尽可能避免。正是由于这个原因,Android 使用 dp
而不是 px
。在必须在 px
和 dp
之间转换的情况下或其他复杂情况下,应该使用您编写的代码。根据屏幕大小调整按钮大小之类的事情非常常见,Android 提供了直接在布局编辑器中执行此操作的方法。
虽然我认为这不是最好的方法,但 ConstraintLayouts
可以帮助自动管理宽度。
但是如果你想坚持这种方法,试试这个:而不是 onCreate
,尝试在 onConfigurationChanged
中这样做。类似于:
Activity Class
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" />
我有一个按钮(它是一个 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 的 Constraint Layout。在布局编辑器中,您可以指定按钮的约束条件,并定义它在不同布局和屏幕尺寸下的外观。
另请注意,虽然您编写的代码可能有效,但手动计算屏幕密度是一项危险且棘手的任务,应尽可能避免。正是由于这个原因,Android 使用 dp
而不是 px
。在必须在 px
和 dp
之间转换的情况下或其他复杂情况下,应该使用您编写的代码。根据屏幕大小调整按钮大小之类的事情非常常见,Android 提供了直接在布局编辑器中执行此操作的方法。
虽然我认为这不是最好的方法,但 ConstraintLayouts
可以帮助自动管理宽度。
但是如果你想坚持这种方法,试试这个:而不是 onCreate
,尝试在 onConfigurationChanged
中这样做。类似于:
Activity Class
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" />