Android应用横竖屏切换处理

上周在开发时,发现一种更好的方式处理横竖屏切换,节省了不少代码。之前在切换横竖屏,同时都是写了两个Actiity页面,两个页面分别对应不同的布局,通过跳转实现切换。后来发现在一个Activity页面就可以完成这些工作,布局文件名字相同但放在不同的layout目录(layout-land和layout-port)。

正文

  • 控制页面的横竖屏显示方式
一种方法是在AndroidManifest.xml中定义该Activity的android:screenOrientation属性,
"unspecified" 默认值,由系统来判断显示方向。
"landscape" 横屏显示
"portrait" 竖屏显示
“user" 用户当前首选的方向
"behind" 与上一个Activity方向一致
"sensor" 有物理的传感器来决定
"nosensor" 忽略物理传感器

另一种方法是在Java代码中设置,setRequestedOrientaion();

  • 处理横竖屏切换
方法一:在res目录建立layout-land和layout-port目录,横竖屏的布局分别放在这两个目录(相同的布局文件名字)。程序运行时,会根据横竖屏状态,自动加载布局文件。
方法二:将不同布局文件放在layout目录,手动根据横竖屏状态来加载布局文件。
/**
 * 获取横竖屏状态
 */
private void getScreenState() {
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        // 横屏
    } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        // 竖屏
    }
}

  • 页面重载问题
Actvity在每次横竖屏切换时都会重新调用onPause->onStop->onDestroy->onCreate->onStart->onResume。
如果页面不需要重新载入,可以在AndroidManifest.xml中设置该Activity的android:configChanges属性。覆盖Activity的onConfigurationChanged方法,来处理横竖屏切换。
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        // land
    } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        // port
    }
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值