指定requestedOrientation时,Android会检测设备方向

时间:2018-05-10 20:15:58

标签: android android-layout android-orientation

我正在为视频流构建应用。它具有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方法(我注意到,如果我点击按钮然后旋转手机,只要被请求的方向设置为与不同的东西不同,此方法就不再被调用了):

@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        
    }
}

我尝试将requestedOrientation重置为包含这样的内容:

@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);
}

但它不起作用,因为方向被强制从纵向到横向,然后再次设置为未指定,然后用户有机会将其旋转到横向,所以它会立即再次变为肖像,它似乎在做什么都没有。

1 个答案:

答案 0 :(得分:0)

好的,我找到了一个查看this other answer的解决方案。它不适合我,所以我稍微修改了一下:

<强> MainActivity

itertools.chain