我正在尝试将平板电脑的版式设置为横向,所以我有以下代码:
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
但是,如果我在此调用后立即调用 getResources()。getDisplayMetrics()。widthPixels ,它将返回平板电脑的高度而不是宽度。仅在调用 onConfigurationChanged 之后,我才开始获得正确的高度,该高度发生在使用错误的屏幕尺寸对主布局进行充气之后。
我尝试在setRequestedOrientation之后这样做:
DisplayMetrics dm = getResources().getDisplayMetrics();
int height = dm.heightPixels;
int width = dm.widthPixels;
dm.heightPixels = width;
dm.widthPixels = height;
getResources().updateConfiguration(getResources().getConfiguration(), dm);
但这没有帮助。
处理这种情况的正确方法是什么?
P。 S.尽管我将方向设置为SCREEN_ORIENTATION_LANDSCAPE,但发生更改后,我仍然不断获得SCREEN_ORIENTATION_USER。为什么会这样?
答案 0 :(得分:0)
您是否在清单的活动代码中添加了$amount - 1
?如果没有,请添加并重试
答案 1 :(得分:0)
问题是您的代码在设置布局之前会计算宽度和高度。有一个叫做ViewTreeObserver的东西,它只能让您在设置布局后进行计算。
示例代码
final LinearLayout layout = (LinearLayout) findViewById(R.id.YOUR_VIEW_ID);
ViewTreeObserver vto = layout.getViewTreeObserver();
vto.addOnGlobalLayoutListener (new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
layout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
int width = layout.getMeasuredWidth();
int height = layout.getMeasuredHeight();
}
});