Java 平板电脑强制采用横向模式,手机强制采用纵向模式
我一直在开发一个广播应用程序,在这一过程中,我决定强制平板电脑只显示横向,手机只显示纵向。 以下是我迄今为止为实现这一目标所做的工作 首先,我在res.values中放入一个bool资源来检查屏幕大小Java 平板电脑强制采用横向模式,手机强制采用纵向模式,java,android,Java,Android,我一直在开发一个广播应用程序,在这一过程中,我决定强制平板电脑只显示横向,手机只显示纵向。 以下是我迄今为止为实现这一目标所做的工作 首先,我在res.values中放入一个bool资源来检查屏幕大小 // From my res/values/bool.xml(sw600 and 720)dp. <?xml version="1.0" encoding="utf-8"?> <resources> <bo
// 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 onDestroy() {
if(radioService != null){
radioService.cancelNotification();
}
super.onDestroy();
}
要正确更改方向,应在清单中的活动标记中添加以下内容-
<activity
android:name="com.ABC"
android:configChanges="keyboardHidden|orientation|screenSize">
</activity>
我终于找到了解决我问题的办法。我没有在我的值资源文件中引用其他屏幕视图。当我编辑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>
bool.xml(移动)
真的
假的
//bool.xml(sw600dp)
假的
真的
//bool.xml(sw720dp)
假的
真的
通过此操作,我的活动现在可以按要求的屏幕方向开始。在setContentView()之前调用代码可能重复?这消除了错误,但应用程序在切换到横向之前以纵向显示几秒钟。我不希望这项活动从肖像开始。我该如何解决这个问题?您是否已将此添加到您的清单文件中?活动标签内的android:configChanges=“keyboardHidden | orientation | screenSize”。如果这不起作用,请告诉我,如果起作用,请接受答案。我补充了这一点,但没有解决问题。取而代之的是,在渲染之前,它由横向UI以纵向模式打开几秒钟properly@benruty能否发布onCreate()的完整代码?谢谢您应该在设置ContentView()之前进行方向更改。我正在更新我的答案。如果你还有问题,请告诉我。
@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);
}
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>