温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

android如何使用activity锁定手机横屏

发布时间:2020-06-02 18:02:03 来源:亿速云 阅读:1112 作者:Leah 栏目:移动开发

这篇文章为大家分享android使用activity锁定手机横屏的方法。文章还介绍了activity的其他运用方式,希望大家通过这篇文章能有所收获。

一、锁定Activity运行时屏幕方向,如下图(演示锁定横屏):

android如何使用activity锁定手机横屏

我们可以通过以下两种方式实现锁定Activity运行时屏幕的方向:

(1)通过修改AndroidMainfest.xml配置文件

修改Android/app/mainfests/AndroidMainfest.xml下的配置文件如下:

<activity>节点的android:screenOrientation属性可以完成该任务(portrait为保持竖屏,landscape为保持横屏)

 

 1 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2     package="com.example.administrator.day18"> 3     <application 4         android:allowBackup="true" 5         android:icon="@mipmap/ic_launcher" 6         android:label="@string/app_name" 7         android:supportsRtl="true" 8         android:theme="@style/AppTheme"> 9         <activity android:name=".Main2Activity"10         //添加screenOrientation属性(portrait为保持竖屏,landscape为保持横屏)11             android:screenOrientation="landscape">12             <intent-filter>13                 <action android:name="android.intent.action.MAIN" />14 15                 <category android:name="android.intent.category.LAUNCHER" />16             </intent-filter>17         </activity>18     </application>19 </manifest>

 

(2)通过java代码实现:

 1 import android.content.pm.ActivityInfo; 2 import android.os.Bundle; 3 import android.support.annotation.Nullable; 4 import android.support.v7.app.AppCompatActivity; 5 /** 6  * Created by panchengjia on 2016/12/9. 7  */ 8 public class Test extends AppCompatActivity { 9     @Override10     protected void onCreate(@Nullable Bundle savedInstanceState) {11         super.onCreate(savedInstanceState);12         setContentView(R.layout.activity_main2);13         //添加setRequestedOrientation方法实现锁定横屏(portrait为保持竖屏,landscape为保持横屏)14         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);15     }16 }

现在第一种需求通过修改配置文件以及java代码的方式实现,但这里要注意的是当同时在配置文件以及java文件中设置了方向锁定时,系统会以配置文件设置为准(可以理解为配置文件优先级高于java代码)

 

二、Activity转换方向时数据的保存

 

下面我们展示Activity转换方向时未保存数据的情况:

演示中,我们通过记录按钮的点击次数(土司)来判断数据是否被保存

android如何使用activity锁定手机横屏

我们发现当屏幕(Acticity)由横屏转为竖屏时,数据未实现保存,继续从0开始计数点击次数。

当我们设置保存数据后,演示情况如下:

android如何使用activity锁定手机横屏

保存数据后,点击数土司会继续竖屏状态的数据更新,而不是从零重新开始。

针对数据保存我们同样有两种方法实现,分别为在java代码中使用onSaveInstanceState()方法以及在属性。

下面我们详细分析这两种方法的实现:

 

(1)onSaveInstanceState详解

 

实现代码如下(这里写了Activity的全部生命周期,并打印log用于分析性能):

 1 import android.support.v7.app.AppCompatActivity; 2 import android.os.Bundle; 3 import android.util.Log; 4 import android.view.View; 5 import android.widget.Toast; 6 /** 7  * Created by panchengjia on 2016/12/9. 8  */ 9 public class Main2Activity extends AppCompatActivity {10     int num=1;//初始点击次数为111     @Override12     protected void onCreate(Bundle savedInstanceState) {13         super.onCreate(savedInstanceState);14         setContentView(R.layout.activity_main2);15         if(savedInstanceState!=null){16             num=savedInstanceState.getInt("data");17         }18         Log.i("Tag","onCreate");19     }20     //设置点击事件土司记录数据21     public void show(View v){22         Toast.makeText(this, num++ +"", Toast.LENGTH_SHORT).show();23     }24     @Override25     protected void onSaveInstanceState(Bundle outState) {26         super.onSaveInstanceState(outState);27         outState.putInt("data",num);28         Log.i("Tag","onSaveInstanceState");29     }30     @Override31     protected void onStart() {32         super.onStart();33         Log.i("Tag","onStart");34     }35     @Override36     protected void onResume() {37         super.onResume();38         Log.i("Tag","onResume");39     }40     @Override41     protected void onRestart() {42         super.onRestart();43         Log.i("Tag","onRestart");44     }45     @Override46     protected void onPause() {47         super.onPause();48         Log.i("Tag","onPause");49     }50     @Override51     protected void onStop() {52         super.onStop();53         Log.i("Tag","onStop");54     }55     @Override56     protected void onDestroy() {57         super.onDestroy();58         Log.i("Tag","onDestroy");59     }60 }

功能实现的核心代码为protected void onSaveInstanceState(Bundle outState)方法。Activity旋转前后的Log如下:

android如何使用activity锁定手机横屏

从Log中可以得知屏幕(Acticity)旋转时,会销毁之前的Activity,然后重建旋转后的Activity。

(2)修改AndroidManifest.xml配置文件

在AndroidManifest.xml中添加configChanges属性,如下:

 1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3     package="com.example.administrator.day18"> 4     <application 5         android:allowBackup="true" 6         android:icon="@mipmap/ic_launcher" 7         android:label="@string/app_name" 8         android:supportsRtl="true" 9         android:theme="@style/AppTheme">10         <activity android:name=".Main2Activity"11         //添加configChanges属性12             android:configChanges="orientation|keyboard|screenSize">13             <intent-filter>14                 <action android:name="android.intent.action.MAIN" />15 16                 <category android:name="android.intent.category.LAUNCHER" />17             </intent-filter>18         </activity>19         <!--<activity android:name=".Main2Activity"></activity>-->20     </application>21 </manifest>

在java中添加对应的onConfigurationChanged()方法用于Log打印分析,方法本身在功能实现上无实际意义:

 

1 @Override2 public void onConfigurationChanged(Configuration newConfig) {3    super.onConfigurationChanged(newConfig);4    Log.i("Tag","onConfigurationChanged");5 }

屏幕旋转前后Log如下(演示两次旋转):

android如何使用activity锁定手机横屏

从Log中可以得知屏幕(Acticity)旋转时,使用第二种方法保存数据不会销毁Activity,不用重复的销毁建立Activity从而达到优化内存性能的目的。建议使用这种方法

上文描述的就是android使用activity锁定手机横屏的方法,具体使用情况还需要大家自己动手实验使用过才能领会。如果想了解更多相关内容,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI