精华内容
下载资源
问答
  • Android开发文档上专门有一小节解释这个问题。简单来说,Activity是负责与用户交互的最主要机制,任何“设置”(Configuration)的改变都可能对... 当屏幕旋转时,这个Configuration就发生了改变,因此当前显示的Activi
  • 屏幕旋转180度 activity旋转180度 具体看代码
  • Android屏幕旋转Activity的生命周期

    热门讨论 2012-06-06 17:20:19
    Android屏幕旋转Activity的生命周期
  • 旋转屏幕Activity执行的生命周期方法

    千次阅读 2016-12-17 19:26:11
    很多时候会用到屏幕旋转时需要对一些数据进行保存,例如当横竖屏区切换时要保存先前屏幕的一些数据和状态,那么在旋转屏幕的时候都会调用activity生命周期的哪些方法呢,今天写了个程序运行得出了如下结果: ...

    个人学习笔记:

    很多时候会用到屏幕旋转时需要对一些数据进行保存,例如当横竖屏区切换时要保存先前屏幕的一些数据和状态,那么在旋转屏幕的时候都会调用activity生命周期的哪些方法呢,今天写了个程序运行得出了如下结果:

    (1)如果销毁当前的Activity,那么就要重写Activity的两个方法

    onSaveInstanceState()保存数据和 onRestoreInstanceState()还原数据
    执行顺序:
    onCreate
    onStart
    onResume


    onPause
    onSaveInstanceState
    onStop
    onDestroy
    onCreate
    onStart
    onRestoreInstanceState
    onResume


    在灭屏时调用的方法
    onPause
    onSaveInstanceState
    onStop


    屏幕重新唤醒时调用的方法:
    onRestart
    onStart
    onResume


    退出程序时调用的方法:
    onPause
    onStop
    onDestroy


    (2)在manifest.xml文件中设置android:configChanges="orientation|keyboardHidden|screenSize"
    切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
    需注意的是,在4.0以后的版本需要加上ScreenSize 不然不会执行onConfigurationChanged方法
    执行顺序:
    onCreate
    onStart
    onResume


    onConfigurationChanged
    展开全文
  • 余好读书,乐思善疑,有过目不忘之能,亦有掩卷即忘之病,故常撰文以记之……一、禁止屏幕旋转:打开工程中的 AndroidManifest....screenOrientation="landscape" (强制横屏)二、屏幕旋转不刷新 Activity:当屏幕旋...

    余好读书,乐思善疑,有过目不忘之能,亦有掩卷即忘之病,故常撰文以记之……

    一、禁止屏幕旋转:

    打开工程中的 AndroidManifest.xml 文件,在 中,添加一条属性信息:

    android:screenOrientation="portrait" (强制竖屏)

    android:screenOrientation="landscape" (强制横屏)

    二、屏幕旋转不刷新 Activity:

    当屏幕旋转时,会重新执行 Activity 中的 onCreate() 方法,即刷新了 Activity 的显示。若是不想刷新,可以用第一种方法锁屏,也可以用以下方法:

    1、打开工程中的 AndroidManifest.xml 文件,在 中,添加一条属性信息:

    android:configChanges=”orientation|keyboardHidden”

    注:这个属性指的是,当后边属性值代表的事件发生时,Activity 会执行某个函数,orientation 指的是当屏幕旋转时,keyboardHidden 指的是键盘辅助功能改变。“|”为或符号,指这两个中任意一个发生,就执行 Activity 某个函数。

    注2:如果你的开发 API 等级等于或高于 13,你还需要设置 screenSize,因为 screenSize 会在屏幕旋转时改变。

    2、在对应 Activity 中重写 onConfigurationChanged() 方法:

    @Overridepublic voidonConfigurationChanged(Configuration newConfig) {

    // TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);

    if(newConfig.orientation== Configuration.ORIENTATION_LANDSCAPE) {

    // 什么都不用写 }

    else{

    // 什么都不用写 }

    }

    注:如果在 if、else 中,使用了 setContentView(R.layout.xxxx) 函数,那么就可以实现:每次屏幕旋转时,调用不同的布局。

    三、动态更改屏幕方向:

    有些时候,我们不需要把程序写死,需要在程序中有需要的时候旋转屏幕,例如:在“设置”里添加一个 ListView 项,可通过点击选择横屏或竖屏。(比如:电子书软件)

    假设有一个按钮,我们仅重写 OnClick() 函数:

    @Overridepublic voidonClick(View v) {

    // 如果是竖排,则改为横排if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    }

    // 如果是横排,则改为竖排else if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    }

    }

    重点就是:getRequestedOrientation() 函数、setRequestedOrientation() 函数的使用。

    注意:使用这种方法,必须事先在 AndroidManifest.xml 的 中,添加android:screenOrientation属性值,不然 getRequestedOrientation() 可能会出问题。

    展开全文
  • Activity屏幕当中显示的方向。属性值可以是下表中列出的一个值: "unspecified" 默认值,由系统来选择方向。它的使用策略,以及由于选择时特定的上下文环境,可能会因为设备的差异而不同。 "...

    Activity在屏幕当中显示的方向。属性值可以是下表中列出的一个值:

    "unspecified"默认值,由系统来选择方向。它的使用策略,以及由于选择时特定的上下文环境,可能会因为设备的差异而不同。
    "user"使用用户当前首选的方向。
    "behind"使用Activity堆栈中与该Activity之下的那个Activity的相同的方向。
    "landscape"横向显示(宽度比高度要大)
    "portrait"纵向显示(高度比宽度要大)
    "reverseLandscape"与正常的横向方向相反显示,在API Level 9中被引入。
    "reversePortrait"与正常的纵向方向相反显示,在API Level 9中被引入。
    "sensorLandscape"横向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。
    "sensorPortrait"纵向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。
    "sensor"显示的方向是由设备的方向传感器来决定的。显示方向依赖与用户怎样持有设备;当用户旋转设备时,显示的方向会改变。但是,默认情况下,有些设备不会在所有的四个方向上都旋转,因此要允许在所有的四个方向上都能旋转,就要使用fullSensor属性值。
    "fullSensor"显示的方向(4个方向)是由设备的方向传感器来决定的,除了它允许屏幕有4个显示方向之外,其他与设置为“sensor”时情况类似,不管什么样的设备,通常都会这么做。例如,某些设备通常不使用纵向倒转或横向反转,但是使用这个设置,还是会发生这样的反转。这个值在API Level 9中引入。
    "nosensor"屏幕的显示方向不会参照物理方向传感器。传感器会被忽略,所以显示不会因用户移动设备而旋转。除了这个差别之外,系统会使用与“unspecified”设置相同的策略来旋转屏幕的方向。

    注意:在给这个属性设置的值是“landscape”或portrait的时候,要考虑硬件对Activity运行的方向要求。正因如此,这些声明的值能够被诸如Google Play这样的服务所过滤,以便应用程序只能适用于那些支持Activity所要求的方向的设备。例如,如果声明了“landscape”、“reverseLandscape”、或“sensorLandscape”,那么应用程序就只能适用于那些支持横向显示的设备。但是,还应该使用<uses-feature>元素来明确的声明应用程序所有的屏幕方向是纵向的还是横行的。例如:<uses-feature android:name=”android.hardware.screen.portrait”/>。这个设置由Google Play提供的纯粹的过滤行为,并且在设备仅支持某个特定的方向时,平台本身并不控制应用程序是否能够被按照。

     

     

    旋转屏幕导致Activity重建解决办法:(如果你的Activity横向纵向共用同一个layout文件,方法3无疑是最省事的)

    方法1:禁止旋转屏幕毫无疑问,这是最懒的办法了,相当于回避了本文提出的问题,方法如下看看就好:

    <activity android:name=".MyActivity"

    android:screenOrientation="portrait"

    android:label="@string/app_name">

    方法2:旋转后恢复现场----------

    package com.example.scareenchange;

    import android.app.Activity;

    import android.os.Bundle;

    import android.view.View;import android.widget.EditText;

    import android.widget.Toast;

    public class MainActivity extends Activity {

    private EditText editText1;

    private int i;

    @Override protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    editText1=(EditText) findViewById(R.id.editText1);

    //注意一定要加if语句,不然程序异常

    if(savedInstanceState!=null) {

    //通过Bundle对象取出

    int i=savedInstanceState.getInt("info");

    } }

    public void button1(View v) {

    editText1.setText((i++)+"");

    }

    /* *这个方法会在重新创建Activity之前调用

    *我们在这个方法里保存对象,以解决Activity重新创建问题 * */

    @Override protected void onSaveInstanceState(Bundle outState) {

    // TODO Auto-generated method stub

    super.onSaveInstanceState(outState);

    Toast.makeText(getApplicationContext(), i+"", 1000).show();

    outState.putInt("info", i); }}

    方法3:手工处理旋转,但也有办法让指定的Configuration改变时不重建Activity,方法是在AndroidManifest.xml里通过android:configChanges属性指定需要忽略的Configuration名字,

    例如下面这样:<activity android:name=".MyActivity"

    android:configChanges="keyboard|keyboardHidden|screenSize|orientation"

    android:label="@string/app_name">

    这样设置以后,当屏幕旋转时Activity对象不会被销毁——作为替代,Activity的onConfigurationChanged()方法被触发,在这里开发者可以获取到当前的屏幕方向以便做必要的更新。既然这种情况下的Activity不会被销毁,旋转后Activity里正显示的信息(例如文本框中的文字)也就不会丢失了。

     

     

    横竖屏切换不同的布局、

    如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局。

    可以通过以下两种方法来切换布局:

    1)在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如:layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序调用Activity的onCreate方法中的setOnContent(xxx),并自动加载相应的布局。

    2)假如布局资源不按照如上设置,则可以通过java代码来判断当前是横屏还是竖屏然后来加载相应的xml布局文件。因为当屏幕变为横屏的时候,系统会重新加载当前Activity的onCreate方法(也就是说:该Activity的生命周期要重头开始),你可以把以下方法放在你的onCreate中来检查当前的方向,然后可以让你的setContentView来载入不同的layout 。

    /** 1:竖屏   2:横屏 判断屏幕以旋转的方向 */
        private int orientation;
    orientation=getResources().getConfiguration().orientation;

     

    展开全文
  • Activity旋转屏幕时的生命周期

    千次阅读 2018-09-26 16:01:26
    模拟器版本为 android5.0 (以下数据测试) 主要根据在AndroidManifest中配置configChanges参数决定 ...启动 activity生命周期如下: 09-26 01:53:04.127 5376-5376/? D/TestApplication: onCrea...

    模拟器版本为 android5.0 (以下数据测试)

    主要根据在AndroidManifest中配置configChanges参数决定

    1. 不进行任何配置和配置android:configChanges="orientation"参数:

    • 启动 activity生命周期如下:
    09-26 01:53:04.127 5376-5376/? D/TestApplication: onCreate...
    09-26 01:53:04.135 5376-5376/? D/TestApplication: onStart...
        onResume...
    
    • 竖屏旋转横屏
    09-26 01:57:06.180 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onPause...
    09-26 01:57:06.181 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onStop...
        onDestroy...
    09-26 01:57:06.222 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onCreate...
    09-26 01:57:06.224 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onStart...
        onResume...
    
    • 横屏旋转为竖屏(和上面的一致)
    09-26 01:57:33.069 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onPause...
    09-26 01:57:33.070 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onStop...
        onDestroy...
    09-26 01:57:33.103 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onCreate...
    09-26 01:57:33.104 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onStart...
    09-26 01:57:33.105 5376-5376/test.juyoufuli.com.testapplication D/TestApplication: onResume...
    
    

    2. 配置 android:configChanges="orientation|screenSize>参数,监控屏幕旋转

    screenSize:设备的屏幕的尺寸信息发生了改变,旋转屏幕时也会触发这个,但是这个值是API13之后才有的,因此13之前的设备没有这个。

    • 只会调用onConfigurationChanged方法,不会调用activity生命周期方法
    09-26 02:21:42.594 15709-15709/test.juyoufuli.com.testapplication D/TestApplication: onConfigurationChanged...
    09-26 02:22:51.193 15709-15709/test.juyoufuli.com.testapplication D/TestApplication: onConfigurationChanged...
    

    总结

    1. Activity 的生命周期变化也会影响到和它绑定的Fragment。
      所以要注意在发生旋转后的数据保存处理。
    展开全文
  • 简单来说,Activity是负责与用户交互的最主要机制,任何“设置”(Configuration)的改变都可能对Activity的界面造成影响,这时系统会销毁并重建Activity以便反映新的Configuration。 “屏幕方向”(orientation...
  • Android旋转屏幕时阻止activity重建

    千次阅读 2016-03-14 09:14:17
    Android在旋转屏幕activity会被重建,重新调用activity的各个生命周期,如果不想重建,那么需做如下设置:android:configChanges="orientation|screenSize"orientation选项指在屏幕方向发生改变,screenSize选项指...
  • 目录Activity简介Activity的生命周期验证生命周期的执行总结 Activity简介 Activity中文意思“活动”,是Android中四大组件之一,主要作用于用户交互、页面展示。可以理解为用户打开Android手机上的任意一个应用的...
  • 当设备旋转时,系统会默认销毁当前activity实例,然后再创建一个新的activity实例,重新调用activity的各个生命周期。Android可完成最佳匹配资源的调用,但前提是它必须通过新建一个activity来实现。设备一经旋转,...
  • 最近学习了Android开发的相关课程,也试着动手做了书上的例子和自己的项目,在《Android编程权威指南》的第三章介绍了Activity的生命周期,提到了旋转设备会导致Activity重建的问题以及对应的解决办法。 教材中...
  • 运行时变更就是设备在运行时发生变化(例如屏幕旋转、键盘可用性及语言)。发生这些变化,Android会重启Activity,这时就需要保存activity的状态及与activity相关的任务,以便恢复activity的状态。 为此,google提供...
  • Android旋转屏幕不销毁Activity

    千次阅读 2016-05-04 14:44:58
    要在AndroidManifest.xml配置Activity android:configChanges="keyboardHidden|orientation|screen...可以在Activity 中监听屏幕旋转 @Override public void onConfigurationChanged(Configuration newConfig) {
  • 对于一般的Activity,如果不做特殊要求,那么在手机切换横竖屏后,Activity会重新运行onCreate()等流程,不过之前start的Activity仍然有效。若想让Activity不再走onCreate等流程,那么就在AndroidManifest.xml文件...
  • 简单来说,Activity是负责与用户交互的最主要机制,任何“设置”(Configuration)的改变都可能对Activity的界面造成影响,这时系统会销毁并重建Activity以便反映新的Configuration。“屏幕方向”(orientation)是...
  • Android Activity屏幕旋转方向完全控制

    千次阅读 2016-11-17 17:06:10
    我们知道,系统提供了android:configChanges="orientation" 清单文件属性以监听屏幕旋转,进而触发onConfigurationChanged方法。 但这有时不能完全满足我们的需求。比如典型的应用场景:视频播放器的屏幕方向锁功能...
  • activity在竖屏的时候,顶部会有状态栏,顶部会有ToolBar,现在需求是,旋转屏幕以后,横屏状态下 整个界面是以全屏状态显示,隐藏ToolBar,不显示屏幕最顶部的状态栏首先,在AndroidManiFest里面设置Activity的属性...
  • 默认情况下,Android设备屏幕方向改变时,会重启正在运行的Activity,会依次走onDestroy()、onCreate(). 如果此时界面运行的是播放音频或者是播放视频,那么旋转后音频或视频状态都会被销毁并重置。 还好Android...
  • 简单来说,Activity是负责与用户交互的最主要机制,任何“设置”(Configuration)的改变都可能对Activity的界面造成影响,这时系统会销毁并重建Activity以便反映新的Configuration。 “屏幕方向”(orientation)...
  • 最近遇到问题 ,测试人员说应用会有偶现卡住的...activity 重启了 ,应该可以肯定是屏幕旋转导致 查看代码该加的都加了: 在进LOG看看: 果然是由于 mcc 和 mnc 更新了。 果断看看其他大神文章: https://...
  • 有时候我们希望让一个程序的界面始终保持在一个方向,不随手机方向旋转而变化:在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入android:screenOrientation=”landscape”属性。landscape=横向...
  • 屏幕旋转Activity会重新创建 可以调用onSaveInstanceState方法进行保存一些信息,在onRestoreInstanceState方法中得到上次保存的信息。 今天要说的是onRetainCustomNonConfigurationInstance和...
  • 一、在manifest配置文件中找到要设置的activity,配置android:configChanges="keyboardHidden|orientation|screenSize",如下所示: <activity android:name=".fragment.todo.leave.submitProcess....
  • 主要针对屏幕旋转Activity 生命周期有何影响。 第一种情况 在没有其它配置的情况下,通过日志打印屏幕旋转会调用的方法。 //onPause()----onStop()-----onDestroy()-----onCreate() ---- onStart()---onResume()...
  • (一)禁止屏幕随手机旋转变化:有时候我们希望让一个程序的界面始终保持在一个方向,不随手机方向旋转而变化:在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入android:screenOrientation=”landscape...
  • 当我旋转屏幕时, onCreate方法重启程序,重新创建所有的元素。所以在manifest文件中设置 android:configChanges="orientation" 再次旋转屏幕时,onCreate方法不被调用了,但是新布局显示的也不正确。 在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,421
精华内容 10,968
关键字:

旋转屏幕则activity