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

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

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

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

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

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

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

(2)通过java代码实现:

1importandroid.content.pm.ActivityInfo;2importandroid.os.Bundle;3importandroid.support.annotation.Nullable;4importandroid.support.v7.app.AppCompatActivity;5/**6*Createdbypanchengjiaon2016/12/9.7*/8publicclassTestextendsAppCompatActivity{9@Override10protectedvoidonCreate(@NullableBundlesavedInstanceState){11super.onCreate(savedInstanceState);12setContentView(R.layout.activity_main2);13//添加setRequestedOrientation方法实现锁定横屏(portrait为保持竖屏,landscape为保持横屏)14setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);15}16}

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

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

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

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

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

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

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

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

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

(1)onSaveInstanceState详解

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

1importandroid.support.v7.app.AppCompatActivity;2importandroid.os.Bundle;3importandroid.util.Log;4importandroid.view.View;5importandroid.widget.Toast;6/**7*Createdbypanchengjiaon2016/12/9.8*/9publicclassMain2ActivityextendsAppCompatActivity{10intnum=1;//初始点击次数为111@Override12protectedvoidonCreate(BundlesavedInstanceState){13super.onCreate(savedInstanceState);14setContentView(R.layout.activity_main2);15if(savedInstanceState!=null){16num=savedInstanceState.getInt("data");17}18Log.i("Tag","onCreate");19}20//设置点击事件土司记录数据21publicvoidshow(Viewv){22Toast.makeText(this,num+++"",Toast.LENGTH_SHORT).show();23}24@Override25protectedvoidonSaveInstanceState(BundleoutState){26super.onSaveInstanceState(outState);27outState.putInt("data",num);28Log.i("Tag","onSaveInstanceState");29}30@Override31protectedvoidonStart(){32super.onStart();33Log.i("Tag","onStart");34}35@Override36protectedvoidonResume(){37super.onResume();38Log.i("Tag","onResume");39}40@Override41protectedvoidonRestart(){42super.onRestart();43Log.i("Tag","onRestart");44}45@Override46protectedvoidonPause(){47super.onPause();48Log.i("Tag","onPause");49}50@Override51protectedvoidonStop(){52super.onStop();53Log.i("Tag","onStop");54}55@Override56protectedvoidonDestroy(){57super.onDestroy();58Log.i("Tag","onDestroy");59}60}

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

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

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

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

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

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

1@Override2publicvoidonConfigurationChanged(ConfigurationnewConfig){3super.onConfigurationChanged(newConfig);4Log.i("Tag","onConfigurationChanged");5}

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

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

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