首页 > 其他分享 >Android 《屏幕切换》

Android 《屏幕切换》

时间:2024-03-11 14:58:17浏览次数:24  
标签:mDesc 竖屏 横屏 切换 方向 Android 屏幕 属性

默认处理机制

除了系统广播之外,App所处的环境也会影响运行,比如手机有竖屏与横屏两种模式,竖屏时水平方向较短而垂直方向较长,横屏时水平方向较长而垂直方向较短。两种屏幕方向不但造成App界面的展示差异,而且竖屏和横屏切换之际,甚至会打乱App的生命周期。

无需重启Activity

横竖屏切换,Activity的生命周期会重新走一遍,为了避免横竖屏切换时重新加载界面的情况,Android设计了一种配置变更机制,在指定的环境配置发生变更之时,无须重启活动页面,只需执行特定的变更行为。该机制的编码过程分为两步:

1 .修改AndroidManifest.xml

首先创建新的活动页面ChangeDirectionActivity,再打开AndroidManifest.xml,看到该活动对应的节点配置是下面这样的:

<activity android:name=".ChangeDirectionActivity" />

给这个activity节点增加android:configChanges属性,并将属性值设“orientation|screenLayout|screenSize”,修改后的节点配置如下所示:

<activity
android:name=".ChangeDirectionActivity"
android:configChanges="orientation|screenLayout|screenSize" />

新属性configChanges的意思是,在某些情况之下,配置项变更不用重启活动页面,只需调用onConfigurationChanged方法重新设定显示方式。故而只要给该属性指定若干豁免情况,就能避免无谓的页面重启操作了,配置变更豁免情况的取值说明见表
image

2 .修改活动页面的Java代码

打开ChangeDirectionActivity的Java代码,重写活动的onConfigurationChanged方法,该方法的输入参数为Configuration类型的配置对象,根据配置对象的orientation属性,即可判断屏幕的当前方向是竖屏还是横屏,再补充对应的代码处理逻辑。下面是重写了onConfigurationChanged方法的活动代码例子:

public class ChangeDirectionActivity extends AppCompatActivity {
   private TextView tv_monitor; // 声明一个文本视图对象
   private String mDesc = ""; // 屏幕变更的述说明
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_change_direction);
       tv_monitor = findViewById(R.id.tv_monitor);
 }
   // 在配置项变更时触发。比如屏幕方向发生变更等等
   // 有的手机需要在系统的“设置→显示”菜单开启“自动旋转屏幕”,或者从顶部下拉,找到“自动旋转”图标并开启
   @Override
   public void onConfigurationChanged(Configuration newConfig) {
       super.onConfigurationChanged(newConfig);
       switch (newConfig.orientation) { // 判断当前的屏幕方向
           case Configuration.ORIENTATION_PORTRAIT: // 切换到竖屏
               mDesc = String.format("%s%s %s\n", mDesc,
                       DateUtil.getNowTime(), "当前屏幕为竖屏方向");
               tv_monitor.setText(mDesc);
               break;
           case Configuration.ORIENTATION_LANDSCAPE: // 切换到横屏
               mDesc = String.format("%s%s %s\n", mDesc,
                       DateUtil.getNowTime(), "当前屏幕为横屏方向");
               tv_monitor.setText(mDesc);
               break;
           default:
               break;
    }
 } 
}

3.只保持竖屏

如果希望App始终保持竖屏界面,即使手机旋转为横屏也不改变App的界面方向,可以修改 AndroidManifest.xml,给activity节点添加android:screenOrientation属性,并将该属性设置为portrait表示垂直方向,也就是保持竖屏界面;若该属性为landscape则表示水平方向,也就是保持横屏界面。修改后的activity节点示例如下:

<activity android:name=".ActTestActivity"
           android:screenOrientation="portrait"/>

landscape 为横屏

标签:mDesc,竖屏,横屏,切换,方向,Android,屏幕,属性
From: https://www.cnblogs.com/paylove/p/18066066

相关文章

  • Android 获取设备的CPU型号和设备型号
    原文:Android获取设备的CPU型号和设备型号-Stars-One的杂货小窝之前整的项目的总结信息,可能不太全,凑合着用吧,代码在最下面一节CPU型号数据华为:ro.mediatek.platformvivo:ro.vivo.product.platformoppo:ro.board.platform或ro.product.board三星:ro.board.pla......
  • Android 获取设备的亮度百分比
    一般的屏幕亮度都是0-255,而小米手机的高版本不一样为了使亮度调节更加细腻,MIUI对原生亮度级别进行了扩展,由原有的255级调整根据不同屏幕分别支持255/1023/2047/4095级。开发者在进行亮度调整时需要先去确认机型亮度的最大值和最小值,然后进行比例调整。计算屏幕亮度fung......
  • Android 《系统广播》
    一.接收系统的分钟广播TimeReceiver.javapackagecom.xian.app.broadcast.receiver;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.util.Log;importjava.util.Date;publicclassTimeReceiv......
  • Android Studio 2021 Gradle 下载失败时,解决方法
    我是mac,Androidstudio2021,创建一个android项目,gradle下载失败,折腾了半天,以下是解决方法:1.出现的错误: 无法下载gradle,2.解决方法使用腾讯的镜像,这里的 地址为:https://mirrors.cloud.tencent.com/gradle/gradle-8.4-all.zip后面的版本可以按自己的需求随意切换然......
  • 【测试】Android Studio 相关下载及参数
    AndroidStudio仅限命令行工具ZipfilesWindows:commandlinetools-win-11076708_latest.zip(153.6MB)SHA-256Checksums4d6931209eebb1bfb7c7e8b240a6a3cb3ab24479ea294f3539429574b1eec862commandlinetools-win-11076708_latest.zipAndroidEmulatorAndroid模拟器......
  • Delphi11安装Android安卓SDK
    由于Google的AndroidSDK不再允许其他程序分发。Delphi11安装后,默认是没有Android安卓SDK的,在默认安装路径的情况下,在C:\Users\Public\Documents\Embarcadero\Studio\22.0\CatalogRepository\AndroidSDK-2525-22.0.46141.0937\目录下面,只有最基本的安卓SDK的命令行工具,我们可以使......
  • 蓝牛窗口定时切换置顶系统V1.00免费版
      蓝牛窗口定时切换置顶系统是一款合适各种活动和直播管理的软件,可以实现全自动按时间定时切换窗口或是按顺序切换切换窗口置顶,达到全自动无人操作。本地下载 ......
  • 区块链钱包-android篇
    ​1:使用ProtocolBuffers 首先根目录gradle中添加依赖:classpath"com.google.protobuf:protobuf-gradle-plugin:0.8.3"然后项目文件中添加plugin,添加依赖包:applyplugin:'com.google.protobuf'protobuf{protoc{artifact='com.google.protobuf:protoc:3.6.1......
  • SwitchHosts 一个修改、管理、切换多个 hosts的开源工具
    本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/316Hosts相关的小工具着实不少,大家需求最多的肯定是hosts切换工具了。SwitchHosts!是一款可以方便你管理和一键切换多个hosts方案的免费开源工具,跨平台支持Windows、macOS和......
  • Android 二维码相关(二)
    Android二维码相关(二)本篇文章继续讲述下如何使用zxing解析二维码图片,获取内容.1:创建RGBLuminanceSource对象.首先获取二维码图片的bitmap对象.Bitmapbitmap=BitmapFactory.decodeResource(getResources(),R.mipmap.test);根据getPixels()获取位图指定区域的像素颜......