安卓应用的横竖屏相关总结

起因是我上安卓课有个实验,要求设置有个首选项sharedpreference来控制屏幕方向。关闭的话,活动窗口只能竖屏,打开的话就能自动切换横竖屏。 我实现后发现,我打开这个首选项,功能没问题。但是我关闭这个首选项之后,当我模拟器横过来,她还是会重绘这个活动强制把布局转换为横屏(就很丑很难受)。后来查了资料解决了。

下面是技术总结:

1.activity窗口的方向和布局文件是两码事 窗口方向的属性是指你允许这个activity是横屏、竖屏、物理感应还是啥的。 布局文件是指绘制当前activity的布局文件,他与窗口方向是分开的。 比如就算你只有一个布局文件(假设是竖屏的),但是你设置窗口模式是sensor或者landscape, 系统会自动强制把当前的布局设置成横屏的,所以为了避免布局被重绘导致布局不好看, 可以设置当前activity的窗口为横屏或者竖屏。

2.设置窗口方向有两种方式

      1.属性设置,在xml的activity的screenOrientation属性设置 

      2.编码设置,通过setRequestedOrientation() 两种设置的参数含义都一样。

3.如何设置横竖屏自动切换 以下是一种实现方式,通过读取首选项中的屏幕方向值来选择是只有竖屏显示还是允许横屏显示。

SharedPreferences sp=getSharedPreferences(getString(R.string.preference_path),MODE_PRIVATE);

Boolean orientation=sp.getBoolean("allow_landscape",false);

if (orientation){

//如果允许横屏,设置屏幕方向问感知型

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

//这里是重点,获取当前手机屏幕的方向

int screen = getResources().getConfiguration().orientation;

if (screen == Configuration.ORIENTATION_LANDSCAPE) {

//切换横屏布局

setContentView(R.layout.activity_student_land);

} else if (screen == Configuration.ORIENTATION_PORTRAIT) {

//切换竖屏布局

setContentView(R.layout.activity_student);

}

}

else{//不允许的话,一定要设置屏幕方向固定为某个方向

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

转载于:https://my.oschina.net/u/3765262/blog/3043141

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值