强制平板电脑的横向模式和手机的肖像

时间:2017-08-19 19:14:17

标签: java android

我一直在研究一个广播应用程序,并且在此过程中我决定强制仅为平板电脑和手机的纵向模式显示横向。 以下是我迄今为止所做的工作。

首先,我在res.values中放置一个bool资源来检查屏幕大小。

 //  From my res/values/bool.xml(sw600 and 720)dp.

        <?xml version="1.0" encoding="utf-8"?>
        <resources>
            <bool name="landscape_only">true</bool>
        </resources>

// res/values/bool.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="portrait_only">true</bool>
</resources>

然后,我通过检查主要活动中的布尔值来强制所请求的屏幕方向。

     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // locking out landscape screen orientation for mobiles
        if(getResources().getBoolean(R.bool.portrait_only)){
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        // locking out portait screen orientation for tablets
        if(getResources().getBoolean(R.bool.landscape_only)){
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        }

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);

    }
}

到目前为止,这非常有效。现在这是我的问题。

当我实现我的代码以锁定平板电脑的纵向模式时,我的应用程序以纵向开始几秒钟,然后切换到横向。我如何确保它不是先从肖像开始?它应该从风景开始。

2 个答案:

答案 0 :(得分:0)

只需在取消通知前添加空检查。

 @Override
        protected void onDestroy() {
          if(radioService != null){
             radioService.cancelNotification();
        }
        super.onDestroy();
}

要正确更改方向,您应将以下内容添加到清单中的活动代码 -

<activity 
    android:name="com.ABC"
    android:configChanges="keyboardHidden|orientation|screenSize">
</activity>

在设置布局之前,请务必致电setRequestedOrientation()

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // locking out landscape screen orientation for mobiles
        if(getResources().getBoolean(R.bool.portrait_only)){
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        // locking out portait screen orientation for tablets
        if(getResources().getBoolean(R.bool.landscape_only)){
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        }

        setContentView(R.layout.activity_main);
}

答案 1 :(得分:0)

我终于找到了解决问题的方法。我没有在我的价值资源文件中提供替代屏幕视图的参考。当我编辑我的bool.xml资源文件时,如下所示,我得到了预期的结果。

bool.xml (mobile)
 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="portrait_only">true</bool>
    <bool name="landscape_only">false</bool>
</resources>

// bool.xml (sw600dp)
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="portrait_only">false</bool>
    <bool name="landscape_only">true</bool>
</resources>

// bool.xml (sw720dp)
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <bool name="portrait_only">false</bool>
        <bool name="landscape_only">true</bool>
    </resources>

这样,我的活动现在可以根据需要以所需的屏幕方向开始。