Android显示——横竖屏切换

和我一样,可能有这样的需求:无论设备在横屏还是竖屏状态下,对界面中某个元素执行某种操作后,根据界面中的这个元素属性,启动新的横屏或者竖屏Activity。

我还想"万能的Android API",startActivity的参数Intent对象能否携带一个标志,直接控制横屏或者竖屏。搜了半天,好像没有。。。

那如何处理?
首先Android的菜单文件即AndroidManifest.xml,其中声明的activity的screenOrientation属性决定了onCreate方法执行过程中所采用的屏幕方向。理解这句话,可以想象下面的场景。界面中有两个按键,分别标记着【启动NewActivity横屏】和【启动NewActivity竖屏】,这个NewActivity的screenOrientation值为unspecified(未指定),NewActivity只重写了必要的方法,没有任何逻辑。当界面竖屏时,点击【启动NewActivity横屏】或【启动NewActivity横屏】,NewActivity的onCreate方法执行期间,屏幕方向是竖屏(getResources().getConfiguration().orientation=1)。

显然在上述场景,点击【启动NewActivity横屏】没有实现预期的效果。这就需要在NewActivity的onCreate方法中重新请求屏幕方向。添加下面的代码,就能实现需求。

onCreate(...) {
    ...
    Log.d(TAG,"onCreate: in");
	setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    ...
}

查看log发现,onCreate执行了两次。这是Android系统的规定,如果不想再次执行onCreate,那么在AndroidManifest中配置Activity的congfigChanges属性。当所配置的属性发现变化时,会回调Activity的onConfigrationChanged方法。

public void onConfigrationChanged(Configuration newConfig) {
   Log.d(TAG,"onConfigrationChanged: in");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值