精华内容
下载资源
问答
  • android系统横竖屏切换
    2021-06-03 08:19:04

    目前一般情况下 在横竖屏情况下 我们会遇到一些问题 例如横竖屏显示ui 比例问题 还有activity重启问题 今天说三个问题 一是横竖屏切换 二是 禁止屏幕旋转

    说一下屏幕切换时 的activity 生命周期

    onPause()—->onDestroy()—–>onCreate()

    先说第一个 横竖屏切换 一般的套路如下

    在manifast.xml 中 给当前activity配置 防止activity在屏幕切换时 activity 重建问题

    android:configChanges="orientation|keyboardHidden|screenSize"

    获取屏幕方向

    int orientation = getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_LANDSCAPE) {

    setContentView(R.layout.horizontallayout);        } else if (orientation == Configuration.ORIENTATION_PORTRAIT) {

    setContentView(R.layout.verticallayout);}

    监听屏幕方向 并处理数据

    @Override public void onConfigurationChanged(Configuration newConfig) {

    // 处理你的数据        super.onConfigurationChanged(newConfig);

    }

    二 禁止屏幕旋转

    第一 要先设置屏幕方向

    manifast.xml 设置给activity屏幕方向

    android:screenOrientation="portrait"// 设置竖屏android:configChanges="orientation|keyboardHidden|screenSize"// 防止activity 重建

    在java 代码中设置

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    二者选一即可

    第二  为了防止用户开启了屏幕切换权限 进行屏幕监听

    @Override    public void onConfigurationChanged(Configuration newConfig) {

    // 进行数据处理        super.onConfigurationChanged(newConfig);

    }

    第三  保存数据 防止activity 被销毁重建 进行数据处理

    @Override    protected void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);

    // 保存数据    }

    或者在onpush 方法中保存

    在oncreate() 方法中获取数据 进行设置即可

    注意 此处会有一个问题 就是 当客户开启了屏幕旋转的权限时 横屏启动时可能会出现闪退 情况

    先说一下 我们的app 启动 app 启动默认的竖屏启动的 但是如果在启动过程中 app 感应到重力发生变化 activity 就会发生改变 无论你有没有设置方向 而此时就有可能删除 这是数据问题 异常自己捕获就好了

    更多相关内容
  • Android 横竖屏切换

    2021-10-30 16:33:45
    ①如果不想让app在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,他有以下几个参数: “unspecified”:默认值由系统来判断显示方向,...

    1.禁止横竖屏转换
    ①在AndroidManifest.xml中设置activity中的android:screenOrientation属性值。
    设置android:screenOrientation=“portrait”
    则无论手机如何变动,拥有这个属性的activity都将是竖屏显示。
    android:screenOrientation=“landscape”,为横屏显示。
    ②也可以在Java代码中来设置
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

    另外,android中每次屏幕的切换会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置,那样,进行中的游戏就不会自动重启了!

    2.横竖屏切换
    如果要让app在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局。可以通过以下两种方法来切换布局:
    1)在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如main.xml。layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序为调用Activity的onCreate方法,从而加载相应的布局。
    2)假如布局资源不按照如上设置,则可以通过java代码来判断当前是横屏还是竖屏然后来加载相应的xml布局文件。因为当屏幕变为横屏的时候,系统会重新呼叫当前Activity的onCreate方法,你可以把以下方法放在你的onCreate中来检查当前的方向,然后可以让你的setContentView来载入不同的layout。
    if(getResources().getConfiguration().orientation== Configuration.ORIENTATION_LANDSCAPE){
    Log.i(“info”, “landscape”); // 横屏
    }else if(getResources().getConfiguration().orientation== Configuration.ORIENTATION_PORTRAIT) {
    Log.i(“info”, “portrait”); // 竖屏
    }

    3.通过onConfigurationChanged拦截横竖屏变换
    由于Activity每次横竖屏切换都会重新调用onPause->onStop-> onDestory->onCreate->onStart->onResume,为此涉及到内容和数据的保存和读取,否则转屏之前的内容就会消失了。很多时候这样的结果让程序繁琐,为此Android提供了在manifest中设置android:configChanges属性,让Activity不延续上述的重建流程。可以在Android工程的Mainfest.xml中配置Activity:android:configChanges=“keyboardHidden|orientation”,横竖屏切换之后就不会执行OnCreat方法了,而是会去调用onConfigurationChanged(),这样就能控制横竖屏的切换了。用户可以在Activity或View的onConfigurationChanged方法中获取当前横竖屏参数。至于其调用顺序跟touch事件的传递顺序相似,不过他没有消费事件的概念,会顺次调用到每一个onConfigurationChanged函数。
    需要重写Activity的onConfigurationChanged方法。实现方式如下,不需要做太多的内容:
    @Override
    public void onConfigurationChanged( Configuration newConfig) { super.onConfigurationChanged( newConfig); if(getResources().getConfiguration().orientation ==Configuration.ORIENTATION_LANDSCAPE) {
    // land donothing is ok
    } else if(getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {
    // port donothing is ok
    }
    }
    需要注意的是,onConfigurationChanged函数中只能获得横竖屏切换后的参数,在该函数中获取不到新的Layout和控件的尺寸位置信息,如果要处理尺寸和位置信息,必须通过消息异步或者延时调用。

    4.自适应转换
    如果想让它启动的时候是横屏的话就横屏表示,纵屏的话就纵屏表示,然后手机切换横竖屏就不能用了该怎么解决呢?
    首先:在Mainfest.xml中追加两个属性
    android:screenOrientation=“sensor”
    android:configChanges=“orientation|keyboardHidden”
    第二步:取得屏幕的长和宽,进行比较设置横竖屏的变量。
    Display display = getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    int height = display.getHeight();
    if (width > height) {
    orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; //横屏
    } else {
    orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; //竖屏
    }
    第三步:在onConfigurationChanged函数中追加this.setRequestedOrientation(orientation)就行了。
    public void onConfigurationChanged( Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    this.setRequestedOrientation(orientation);
    }
    但是这样的话你切到别的画面的时候再回到原画面,它就仍然是横的或者是纵的。怎么让它从别的屏幕回来后,又重新横竖屏布局呢?
    只要在OnResume()中在设定下就行了。但是这个只支持横竖屏只有一个layout的。横竖屏分别对应layout的还不知道该怎么解决。
    protected void onResume() {
    orientation = ActivityInfo.SCREEN_ORIENTATION_USER;
    this.setRequestedOrientation(orientation);
    Display display = getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    int height = display.getHeight();
    if (width > height) {
    orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
    } else {
    orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
    }
    super.onResume();
    }

    注意:
    ①不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。
    ②设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次。
    ③设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。

    展开全文
  • 本文实例总结了Android横竖屏切换相关技巧。分享给大家供大家参考,具体如下: 一、禁止横竖屏切换 Android横竖屏切换在手机开发中比较常见,很多软件在开发过程中为了避免横竖屏切换时引发不必要的麻烦,通常禁止掉...
  • Android 横竖屏切换总结

    千次阅读 2021-06-13 03:38:28
    一.Android切换横竖屏应用的横竖屏设置应用的横竖屏设置主要是通过Activity的screenOrientation属性控制,属性值如下:主要有以下两种方式设置screenOrientation属性值静态设置,即在Mainfest文件中配置...

    一.Android切换横竖屏

    应用的横竖屏设置

    应用的横竖屏设置主要是通过Activity的screenOrientation属性控制,属性值如下:

    52aa3a2c0417

    主要有以下两种方式设置screenOrientation属性值

    静态设置,即在Mainfest文件中配置screenOrientation属性

    动态设置,即调用Activity的setRequestedOrientation(@ActivityInfo.ScreenOrientation int requestedOrientation)方法设置screenOrientation属性值

    以上两种方法,均可以通过改变screenOrientation属性值的方式配置屏幕方向属性,人为的限制屏幕可自动选择或者锁定横竖屏。只不过动态设置可以通过动态的改变屏幕方向属性值的方式,从而动态的设置屏幕方向

    系统的横竖屏设置

    系统横竖屏设置可以设置自动旋转(即应用界面根据系统自动旋转)或者锁定某一方向的屏幕

    以三星手机为例:

    52aa3a2c0417

    自动旋转

    52aa3a2c0417

    锁定竖屏

    综上,系统的设置和应用的属性共同控制了屏幕的横竖展示。

    这里做了个简单的表格,列出一些常用系统横竖屏和应用横竖屏混合设置结果(自动旋转代表会根据手机设备的旋转而旋转):

    screenOrientation属性值

    default

    sensor

    protrait

    landscape

    系统自动旋转

    自动旋转

    自动旋转

    锁定竖屏

    锁定横屏

    系统锁定竖屏

    锁定竖屏

    自动旋转

    锁定竖屏

    锁定横屏

    总结:根据实际测试的结果可知,应用的属性约束优先级要大于系统设置的约束,只有应用属性screenOrientation属性值为默认值时(不设置),应用的横竖屏才受系统自动旋转设置约束。只要screenOrientation属性值不为默认值,应用界面的横竖屏切换只受当前Activity的screenOrientation属性控制。

    二.Android横竖屏切换Activity生命周期

    关于Android横竖屏切换Activity是否会销毁重建,这个由Activity的configChanges属性控制。当一个配置改变时Activity默认会销毁重建,但是如果这个属性声明了此项配置后,Activit就不会销毁重建,而是回调Activity的onConfigurationChanged方法。

    configChanges的可配置属性如下:

    52aa3a2c0417

    横竖屏切换 - Activity销毁重建

    对于android3.2(API13)及以后的系统,以下任意一种配置,横竖屏切换Activity的生命周期都会重新执行一次

    (备注:关于部分资料说的不配置orientation属性切换竖屏会执行两次的结论,我在4.0之后的手机上测试都是只执行一次,不知道之前版本的系统是不是这样,待验证)

    不配置configChanges属性

    设置android:configChanges="orientation"

    设置android:configChanges="orientation|keyboardHidden"(3.2系统之前的系统不会执行生命周期方法了)

    实测结果:

    52aa3a2c0417

    可见以上三种配置,横竖屏切换时Activity均会销毁重建,Activity的生命周期都会重新执行一次

    横竖屏切换 - Activity不销毁重建

    配置android:configChanges="orientation|keyboardHidden|screenSize"可以控制Activity在横竖屏切换时不销毁重建

    实测结果:

    @Override

    public void onConfigurationChanged(Configuration newConfig) {

    super.onConfigurationChanged(newConfig);

    int orientation = newConfig.orientation;

    if (orientation == ORIENTATION_LANDSCAPE){

    Log.i(TAG, "-------------横屏-------------");

    }else {

    Log.i(TAG, "-------------竖屏-------------");

    }

    Log.i(TAG, "onConfigurationChanged: "+orientation);

    }

    52aa3a2c0417

    可见配置了android:configChanges="orientation|keyboardHidden|screenSize"横竖屏切换时Activity不会销毁重建,而是会回调Activity的onConfigurationChanged方法。这里需要注意的是,第一次切换时onConfigurationChanged方法会回调两次

    总结:在遇到Android横竖屏切换的问题时,我们需要解决的问题主要有两个,布局的变化和数据的存储恢复。可以综合以上的属性设置达到最终自己想要的效果。

    ·

    展开全文
  • ConfigChanges,用于捕获手机状态的改变,当横竖屏切换,屏幕尺寸变化,弹出键盘,系统设置改变等条件,就会触发回调事件onConfigurationChanged。让Activity捕捉到该事件,需要做如下步骤: 声明Activity需要捕捉的...
  • 有时候,我们在同一个activity里面有很多fragment,在横竖屏的时候,有些fragment要求重新加载数据,有些不需要,如何简单控制这些需求,本人分享一点小经验,欢迎大家指正里面的错误。 大家都知道横竖屏翻转的时候...
  • 1.问题描述最近发布的项目,有用户反馈在Android8.0上出现,在一个横的页面,进入一个竖页面,再退出到横页面会先竖然后再横的一个效果。2.问题分析根据BUG的描述,大概可以想象从横Activity_a跳转,...

    1.问题描述

    最近发布的项目,有用户反馈在Android8.0上出现,在一个横屏的页面,进入一个竖屏页面,再退出到横屏页面会先竖屏然后再横屏的一个效果。

    2.问题分析

    根据BUG的描述,大概可以想象从横屏Activity_a跳转,跳转到竖屏Activity_b,关闭Activity_b后,回到Activity_a,Activity_a会先竖屏再横屏;看到这个现象,小伙伴都惊呆了。

    3.问题跟进

    拿了两部Android8.1和Android6.0的设备,把apk install进去之后,惊奇的发现Android8.1是必现的,Android6.0是不会出现,这就很让人怀疑是不是系统版本适配的问题,因为在AndroidManifest.xml已经对应添加了android:configChanges,唯一区别就是应用内部是支持旋转的,于是在某度上大量搜索,很多博客提到这个是Android8.0的bug,不管是不是系统自身的bug,上层应用也无法对framework层进行修改,只能应用自身兼容和修复。

    4.解决问题的方法

    第一种:

    看了大量针对这类问题博客,发现都提到一种的思路就是当横屏Activity_a切换到竖屏Activity_b,在Activity_b执行finish之后,再把应用方向旋转回横屏,这样就避免Activity_a先竖屏再横屏。

    activity_b

    protected void onDestroy() {

    super.onDestroy();

    if (android.os.Build.VERSION.SDK_INT >= >= android.os.Build.VERSION_CODES.O) {

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    }

    }

    或者在finish的时候添加

    finish();

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    }

    个人建议上面finish的这种,因为发现onDestroy概率也会出现,如果应用可以设置旋转方向是SCREEN_ORIENTATION_LANDSCAPE或者SCREEN_ORIENTATION_SENSOR_LANDSCAPE,这样Activity_a就可以通过Intent传递旋转方向参数到Activity_b,Activity_b在调用finish之后就可以根据方向参数旋转回Activity_a的方向。

    第二种:

    大应用的时候,项目里面可能集成很多第三方页面(Activity),第三方页面的还涉及到多进程的情况,这种情况很多人会说自己控制不了第三方的Activity去旋转回跳转前的Activity方向,叫第三方兼容自己的方案,也是不现实的,后面发现Application类里面的registerActivityLifecycleCallbacks,监听整个应用的activity生命周期,在Application的onCreate调用registerActivityLifecycleCallbacks进行注册。

    Application类

    if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {

    this.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

    @Override

    public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {

    }

    @Override

    public void onActivityStarted(@NonNull Activity activity) {

    }

    @Override

    public void onActivityResumed(@NonNull Activity activity) {

    }

    @Override

    public void onActivityPaused(@NonNull Activity activity) {

    }

    @Override

    public void onActivityStopped(@NonNull Activity activity) {

    }

    @Override

    public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {

    }

    @Override

    public void onActivityDestroyed(@NonNull Activity activity) {

    }

    });

    }

    上面接口回调可以很好的实现很多业务需求,接口回调的参数是Activity,可以过滤不需要做旋转回横屏的Activity,已经获取Activity里面的变量(包括多进程),按照自己项目需求就可以在对应生命周期进行旋转回横屏的操作。

    谈思路,好好撸代码!

    展开全文
  • Android监听横竖屏切换

    千次阅读 2022-04-11 09:57:41
    ConfigChanges,用于捕获手机状态的改变,当横竖屏切换,屏幕尺寸变化,弹出键盘,系统设置改变等条件,就会触发回调事件onConfigurationChanged。让Activity捕捉到该事件,需要做如下步骤: 声明Activity需要捕捉...
  • Android 监听横竖屏切换

    千次阅读 2021-01-20 17:12:27
    Android 监听横竖屏切换 重写 Activity 中的 onConfigurationChanged 方法 override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) if (newConfig....
  • 通过XML设置横竖屏切换在项目的 AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,它有以下几个参数:“unspecified” 默认值 由系统来判断显示方向.判定的策略是和设备相关的,...
  • 在日常生活中,手机已经从生活品变成日常必需品,而手机屏幕的切换似乎是每个手机都必有的一个功能,...切换横竖,分两种,销毁当前的Activity重新创建一个Activity,以及不销毁当前的Activity,出于考虑输入数据...
  • 问题:横竖屏切换fragment宽高不适应,没有及时改变解决方法:1.在manifest文件中对应的activity添加下面代码,防止重复创建多个fragmentandroid:configChanges="orientation|screenSize|keyboardHidden"2.添加完...
  • Android 关于横竖屏切换问题

    千次阅读 2022-01-04 16:32:38
    适配手机和Pad横竖屏: 手机:竖屏 ...Pad:横竖屏 当动态设置横竖屏时,pad上会先竖屏再横屏。 解决:在manifest中 activity上 设置 android:screenOrientation="locked" 再动态加载,就没问题了。
  • android横竖屏幕的切换

    千次阅读 2022-03-14 17:07:15
    android横竖屏幕的切换的总结,我们要做一件事首先要判断是什么事情,这里同理,先判断是竖还是横,如if(getRequestedOrientation() ==ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) 而landscape是横的意思,...
  • 即销毁当前,然后重新创建首先,很多软件在设计和开发中为了避免横竖屏切换时引发不必要的麻烦,通常需要让App禁止掉横竖屏的切换,这就需要通过在AndroidManifest.xml中设置activity中的android:screenOrientation...
  • 部分网友会发现Activity在切换到后台或布局从横LANDSCAPE切换到PORTRAIT,会重新切换Activity会触发一次onCreate方法,我们可以在androidmanifest.xml中的activit元素加入这个属性Android:configChanges=...
  • Android横竖屏切换适配方案

    千次阅读 2021-06-06 16:13:44
    Android横竖屏切换适配方案时间:2017-04-21来源:Android开发学习网今天为大家讲解一下Android横竖屏切换的一些知识。Android横竖屏切换适配,一般开发都以竖屏为默认配置,这里也以竖屏UI为前提。1.直接简单的,...
  • Android开发横竖屏切换

    2017-03-20 16:15:25
    平时在使用手机过程中遇到过手机屏幕横竖切换的现象,当时...我们的手机系统内置了横竖屏切换的功能,当我们没有关闭此功能时,系统一旦触发横竖屏切换,在缺省值的情况下,当前活动的APP界面就会进行相应的横竖屏切
  • Android 横竖屏切换加载不同的布局

    千次阅读 2021-05-28 08:27:30
    横屏竖屏在配置文件中的设置,之前已经说过。...缺省状态下,Activity每次横竖屏切换(包括用setRequestedOrientation调用)都会重新调用一轮onPause-> onStop-> onDestory-> onCreate->onStart->onRes...
  • Android视频播放器实现小窗口和全屏状态切换: 针对全屏按钮添加以下方法: controller.setFullScreenListener... // TODO: 2021/8/31 横竖屏切换 Log.d("caowj", "横竖屏切换监听响应"); int direction = getActiv
  • 解决方案1:在Androidmanifest.xml的activity标签中...screenOrientation有如下选项:1.unspecified 默认值,由系统判断状态自动切换2.landscape 横3. portrait 竖4.user 用户当前设置的orientation值5. behi...
  • 讲解之前需要说明的是旋转屏幕:在系统的自动旋转屏幕开启的情况下,我们...系统自动选择屏幕方向behind跟activity堆栈中的下面一个activity的方向一致landscape横方向,显示的宽比高长portrait竖方向,显示的高...
  • android横竖屏切换

    千次阅读 2019-03-22 22:05:45
    横竖屏切换方法:     1.自动切换:         1.通过在androidManifest.xml的activity节点添加screenOrientation属性: //screenOrientation属性说明:...
  • 本篇博客需要Activity生命周期相关知识,如果不了解,参看这篇博客:Android下Activity的生命周期 情况一:如果项目默认不配置...即横竖屏切换时Activity调用onPause()——>onStop()——>onSaveInstance
  • Android横竖屏切换

    2021-05-06 15:22:33
    横竖屏切换 1、横&竖屏对应不同的布局方案 (1)在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如:layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换...
  • Android横竖屏切换的几种方式

    千次阅读 2020-08-14 18:04:52
    最近在搞一个嵌入式的阉割版的Android屏切换竖屏的问题,因为阉割严重所以在PhoneWindowManager里做处理的方案不适用,网上查资料查到了个系统属性ro....android如何改变系统默认横竖屏方向 http://blog.csdn.ne...
  • 我们写一个app测试一下我们在mainActivity中写了android生命周期中几个重要的阶段onCreate,onResume,onStart,onDestory,onStop的方法在其中都调用toast方法告诉我们这些阶段有没有触发。另外我们重写...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,265
精华内容 4,506
关键字:

android系统横竖屏切换