您好,登錄后才能下訂單哦!
這篇文章為大家分享android使用activity鎖定手機(jī)橫屏的方法。文章還介紹了activity的其他運(yùn)用方式,希望大家通過這篇文章能有所收獲。
我們可以通過以下兩種方式實(shí)現(xiàn)鎖定Activity運(yùn)行時屏幕的方向:
修改Android/app/mainfests/AndroidMainfest.xml下的配置文件如下:
<activity>節(jié)點(diǎn)的android:screenOrientation屬性可以完成該任務(wù)(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>
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方法實(shí)現(xiàn)鎖定橫屏(portrait為保持豎屏,landscape為保持橫屏)14 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);15 }16 }
現(xiàn)在第一種需求通過修改配置文件以及java代碼的方式實(shí)現(xiàn),但這里要注意的是當(dāng)同時在配置文件以及java文件中設(shè)置了方向鎖定時,系統(tǒng)會以配置文件設(shè)置為準(zhǔn)(可以理解為配置文件優(yōu)先級高于java代碼)
演示中,我們通過記錄按鈕的點(diǎn)擊次數(shù)(土司)來判斷數(shù)據(jù)是否被保存
我們發(fā)現(xiàn)當(dāng)屏幕(Acticity)由橫屏轉(zhuǎn)為豎屏?xí)r,數(shù)據(jù)未實(shí)現(xiàn)保存,繼續(xù)從0開始計(jì)數(shù)點(diǎn)擊次數(shù)。
保存數(shù)據(jù)后,點(diǎn)擊數(shù)土司會繼續(xù)豎屏狀態(tài)的數(shù)據(jù)更新,而不是從零重新開始。
針對數(shù)據(jù)保存我們同樣有兩種方法實(shí)現(xiàn),分別為在java代碼中使用onSaveInstanceState()方法以及在屬性。
下面我們詳細(xì)分析這兩種方法的實(shí)現(xiàn):
實(shí)現(xiàn)代碼如下(這里寫了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;//初始點(diǎn)擊次數(shù)為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 //設(shè)置點(diǎn)擊事件土司記錄數(shù)據(jù)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 }
功能實(shí)現(xiàn)的核心代碼為protected void onSaveInstanceState(Bundle outState)方法。Activity旋轉(zhuǎn)前后的Log如下:
從Log中可以得知屏幕(Acticity)旋轉(zhuǎn)時,會銷毀之前的Activity,然后重建旋轉(zhuǎn)后的Activity。
在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中添加對應(yīng)的onConfigurationChanged()方法用于Log打印分析,方法本身在功能實(shí)現(xiàn)上無實(shí)際意義:
1 @Override2 public void onConfigurationChanged(Configuration newConfig) {3 super.onConfigurationChanged(newConfig);4 Log.i("Tag","onConfigurationChanged");5 }
屏幕旋轉(zhuǎn)前后Log如下(演示兩次旋轉(zhuǎn)):
從Log中可以得知屏幕(Acticity)旋轉(zhuǎn)時,使用第二種方法保存數(shù)據(jù)不會銷毀Activity,不用重復(fù)的銷毀建立Activity從而達(dá)到優(yōu)化內(nèi)存性能的目的。建議使用這種方法
上文描述的就是android使用activity鎖定手機(jī)橫屏的方法,具體使用情況還需要大家自己動手實(shí)驗(yàn)使用過才能領(lǐng)會。如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。