【发布时间】:2018-05-17 04:01:37
【问题描述】:
我正在构建一个视频流应用。它具有 Youtube 风格的布局,纵向布局在顶部显示视频,在底部显示其他内容列表。该应用可以通过旋转设备或单击按钮以横向全屏显示视频。
现在,如果我将手机旋转为横向,然后再将其旋转回纵向,则布局将按预期恢复为纵向。相反,如果我单击按钮强制为纵向模式,横向旋转设备以查看视频,然后将其旋转回纵向,则布局仍然卡在横向。
我在清单中的活动:
<activity
android:name="MyActivity"
android:configChanges="keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout"
android:label="@string/app_name"
android:launchMode="singleTask" />
我的按钮点击:
mChangeOrientButton.setOnClickListener((OnClickListener)(new OnClickListener() {
public final void onClick(View it) {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}
}));
我的 onConfigurationChanged 方法(我注意到,如果我单击按钮然后旋转手机,只要 requestOrientation 保持设置为不同于 UNSPECIFIED 的设置,就不会再调用此方法):
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
{
// Set the layout for landscape mode
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
// Set the layout for portrait mode
}
}
我尝试将请求的方向重置为 UNSPECIFIED,如下所示:
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
{
// Set the layout for landscape mode
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
// Set the layout for portrait mode
}
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
但它不起作用,因为方向被强制从纵向到横向,然后在用户有机会将其旋转到横向之前再次设置为未指定,所以它立即再次变为纵向,似乎它正在做什么都没有。
【问题讨论】:
标签: android android-layout android-orientation