android动态设置横竖屏切换控制dialog等布局⽂件加载的⽅法在android 开发中,如果碰到需要动态去设置⼀个activity的朝向时,也许你会说简单,调⽤:tRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)⼀句话搞定
但是当你需要通过当前这个activity调起⼀个dialog时,你会发现,我明明设置了横屏,为什么dialog没有⾃⼰去找横屏的布局资源?
通过Resources().getConfiguration().orientation查看,发现是1,对应的值是Configuration.ORIENTATION_PORTRAIT,代表的是竖屏。所以会导致通过这个引⽤创建的各种控件都会去调⽤竖屏的资源⽂件了。
也许这并不是⼀个常见的需求,但是当要做的时候还是挺头痛的。
我也是在碰到做⼀个⽀付sdk时,客户端需求是根据应⽤当前activity的朝向来调起对应的⽀付,但是我们⼜不能使⽤客户端的activity来调起我们需要的dialog提⽰框(因为客户端activity⽣命周期你不可控)。
所以只能使⽤⾃⼰的activity。
以下两种⽅法:
⿇烦法:silas marner
ucd在需要动态设置朝向的activity的配置⽂件中加上⼀句:
盛气凌人android:screenOrientation="behind" 意思就是按当前任务栈的⾃⼰下⾯的⼀个activity的朝向来设置,google还是挺⼈性化的,知道我们可能会有这种需求。
opera什么意思但是你也会发现,加上之后,为什么我前⼀个activity是横屏,后⼀个设置了android:screenOrientation="behind" 还是竖屏?
如果你仔细去观察还会发现onCreate⽅法⾛了两次。
失物招领怎么写通过Resources().getConfiguration().orientation来查看当前activity的朝向
第⼀次:是2,说明是横的。
第⼆次:是1,⼜变成竖的了。
猜测可能是因为屏幕翻转了,导致activity重新执⾏⽣命周期⽅法了。
这也没关系,我们知道通过设置android:configChanges="keyboardHidden|orientation|screenSize"就可以让activity不重新onCreate⽅法了。
iceemogaslik
但是设置之后是没⾛onCreate,可是显⽰的还是坚屏,这个好办,在设置android:configChanges后,activity会在屏幕发⽣翻转时回调onConfigurationChanged⽅法,我们通过设置实现他就可以设置显⽰了。
教育部认证留学机构通过在⾥⾯调⽤tRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);⽅法,就可以设置横屏了,同样,也可以设置竖屏,这个需要看你的需求,⽐如像我这样,是需要和前⾯的activity⼀样的朝向的,就可以在intent中传递⼀个值过来,标明是需要横的还是竖的。
到这⾥,你就最终来通过这个Resources().getConfiguration().orientation来获得当前的页⾯朝向,就会发现和需求的⼀样了
简易法:
此外,别⼀种⽅便的⽅法就是在设置了android:screenOrientation="behind" 了之后,再为需要动态横竖屏的activity设置主题为Theme.Translucent下的任意⼀个主题,就可以了,可以不⽤上⾯的操作
>圣诞快乐翻译