Android基础篇 屏幕横竖屏切换(layout-land)下篇

默认情况下Activity进行屏幕旋转会自动进行onDestroy并重新onCreate

一、非默认情况下

在AndroidManifest.xml的Activity中配置

    <activity
            android:name=".ui.activity.XXXXXActivity"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:windowSoftInputMode="adjustPan" />

(1)禁止屏幕旋转

  //始终竖屏
  android:screenOrientation="portrait"
  //始终横屏
  android:screenOrientation="landscape"

(2)Activity跟随旋转但不销毁和重启

  android:configChanges="keyboardHidden|orientation|screenSize"

然后在Activity中重写onConfigurationChanged方法
(仅作为监听屏幕横竖屏状态,吐司提示,可以不要)

  @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
        	Toast.makeText(this,"竖屏模式",Toast.LENGTH_SHORT).show();
        }else{
        	Toast.makeText(this,"横屏模式",Toast.LENGTH_SHORT).show();
        }
    }

public static final int ORIENTATION_PORTRAIT = 1;  // 标识竖屏
public static final int ORIENTATION_LANDSCAPE = 2; //标识横屏

二、通过 layout-land 构建专属的横屏布局模式

1、首先在工程res目录下新建一个layout-land
在这里插入图片描述

2、其次在layout-land目录中新建一个同名但是是横屏效果的布局
在这里插入图片描述
3、代码

   @Override
    public void onClick(View view) {
    	//按钮控制切换横竖屏  R.id.img_rotate : 自己定义的一个按钮
        if (view.getId() == R.id.img_rotate){
            int screenNum = getResources().getConfiguration().orientation;
            //判断屏幕当前状态
            if (screenNum != Configuration.ORIENTATION_LANDSCAPE){
                //切换成横屏
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            }else {
                //切换成竖屏
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            }
        }
    }

按照上面的流程,构建需要横屏效果的layout-land目录布局,就可以达到有效解决屏幕横竖屏切换啦

三、其他系列文章

Android基础篇 屏幕横竖屏切换以及生命周期管理 上篇
https://blog.csdn.net/weixin_44720673/article/details/114628214

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

其子昱舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值