禁用手机的横向方向,但允许使用平板电脑

时间:2018-05-30 04:37:01

标签: java android

所以普遍的共识就是这样;大多数人使用他们的手机肖像,大多数人在风景中使用他们的平板电脑。根据哪个活动,我的应用程序的布局在您将手机旋转到横向时变得疯狂,并且考虑到用户不太可能在这里旋转并且没有理由这样做,因此不值得花时间修复。我知道activity元素中Manifest中的ole orientation =“portrait”技巧,但是这会将平板电脑用户锁定为肖像,这是不合适的。我想禁用平板电脑用户的所有活动的肖像,同时在手机用户的大多数活动中同时禁用横向。我试图通过制作一个layout-large-land文件夹而不是一个layout-large文件夹来拉快速,但这并不妨碍在平板电脑上更改方向。

4 个答案:

答案 0 :(得分:2)

如果您仅从代码中使用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT),您将在Android 26+上获得有趣的效果。如果启用了系统自动旋转选项,并且您将手机以横向放置并启动新的“活动”,它将以横向出现,然后在几秒钟内旋转为纵向。如果在AndroidManifest中设置了android:screenOrientation="portrait"选项,则不会产生这种效果。但是无法为手机和平板电脑在AndroidManifest中提供不同的轮换选项。

如果您希望在手机上锁定纵向方向并在平板电脑上解锁自动旋转,有一种解决方法。

在AndroidManifest中为项目中的每个Activity设置选项android:screenOrientation="locked"

<activity android:name=".SomeActivity"
    android:screenOrientation="locked" />

“锁定”的位置–将方向锁定为当前旋转方向,无论是什么方向。已在API级别18 from Android docs

中添加

然后在父BaseActivity中设置此类代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState)
    int orientation = getResources().getConfiguration().orientation;
    if (isTablet()) {   
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
    } else if(orientation != Configuration.ORIENTATION_PORTRAIT) {   
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}

有几种方法可以检测到当前设备是Tablet。自行选择isTablet()方法的实现。

答案 1 :(得分:1)

我想你可以在onCreate()方法中使用这样的代码:

int screenLayoutSize = getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;
if (screenLayoutSize == Configuration.SCREENLAYOUT_SIZE_SMALL || screenLayoutSize == Configuration.SCREENLAYOUT_SIZE_NORMAL) {
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
}

并且不要在xml中指定任何方向,因此默认情况下它会以两种模式切换。

答案 2 :(得分:1)

-Do有一件事把它放在res / values文件中作为bools.xml或其他什么(文件名在这里没关系):

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

并将此文件放在res / values-sw600dp和res / values-xlarge:

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

然后进入java类文件在onCreate方法中写下面这段代码:

if(getResources().getBoolean(R.bool.portrait_only)){
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

在最小宽度方向上超过600 dp的设备。  see the below link for the how to add directories and file into android studio project

答案 3 :(得分:1)

我的建议是首先找到通过调用资源在运行时知道活动是否在平板电脑中执行的方法,如this answer中所述。然后按照this answer

中的说明设置方向