有没有办法使应用程序完全忽略屏幕方向变化?
Screen.lockOrientation(this)从github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/...如果你想锁定和解锁代码从方向(这是更灵活)
有没有办法使应用程序完全忽略屏幕方向变化?
Screen.lockOrientation(this)从github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/...如果你想锁定和解锁代码从方向(这是更灵活)
Answers:
可以很容易地覆盖默认行为,并在打开/关闭键盘时禁止更改屏幕方向。
修改清单
打开清单,切换到“应用程序”选项卡,然后为方向更改行为选择要覆盖的所需活动。
在“属性”中,您需要更改两个字段:屏幕方向:选择纵向还是横向-任意选择。这将是默认布局。
选择要覆盖的配置更改事件:在这种情况下,这些事件是keyboardHidden和方向。
修改活动实施
现在,您需要在所需的Activity中覆盖单个函数。
只需将下面的函数添加到您的Activity的类中即可。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
如果使用Source->Override/Implement Methods
菜单选项,则这是默认实现。
而已!现在,您的方向将始终保持不变。
请记住,此设置是针对每个活动的-因此您需要为每个希望禁止方向更改的活动重复此步骤!
(基于SDK 1.1)
您可以使用以下行(在活动中调用)对代码进行相同的更改:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
拨打电话后,您的应用程序将保持横向(或纵向)模式。您可以使用相同的调用(使用不同的ActivityInfo枚举)使它再次对方向转换敏感。
在开发方向感知的Android应用程序中有关于该主题的完整DevX文章。
(警告:自从我发布此链接以来,DevX架起了注册墙。)
如果您通过AndroidManifest.xml或进行设置,setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);则会遇到平板电脑问题。它们的自然/默认方向是风景。
如果您确实要完全忽略屏幕方向更改,则可以使用此setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);值。我会在Stack Overflow问题中讨论有关Android自然传感器方向帮助的更多信息。
这是xml:
<activity
android:name=".MyActivity"
android:screenOrientation="nosensor"
android:configChanges="orientation|keyboardHidden|keyboard"/>
您想阅读当前方向,并在整个活动的整个生命周期中保持这种方式,因此在onCreate结束时,我要做的是以下操作:
// choose an orientation and stay in it
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);