欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Android中Activity運行時屏幕方向與顯示方式

 更新時間:2016年12月20日 10:32:54   作者:潘侯爺  
本文主要對如何控制Android中Activity運行時屏幕方向與顯示方式進行詳細全面的實例講解。具有很好的參考價值,需要的朋友一起來看下吧

現(xiàn)在我們的手機一般都內(nèi)置有方向感應器,手機屏幕會根據(jù)所處位置自動進行橫豎屏切換(前提是未鎖定屏幕方向)。但有時我們的應用程序僅限在橫屏或者豎屏狀態(tài)下才可以運行,此時我們需要鎖定該程序Activity運行時的屏幕方向。還有就是在我們用手機觀看視頻時,隨意的進行橫豎屏切換,但播放進度不會隨著屏幕的轉(zhuǎn)換而從頭開始播放,為了實現(xiàn)這個功能,我們就需要在Activity轉(zhuǎn)換時對當前數(shù)據(jù)進行保存。

現(xiàn)在根據(jù)以上兩種需求,個人提出以下解決方案:

一、鎖定Activity運行時屏幕方向,如下圖(演示鎖定橫屏):

我們可以通過以下兩種方式實現(xiàn)鎖定Activity運行時屏幕的方向:

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

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

<activity>節(jié)點的android:screenOrientation屬性可以完成該任務(wù)(portrait為保持豎屏,landscape為保持橫屏)

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.example.administrator.day18">
 <application
 android:allowBackup="true"
 android:icon="@mipmap/ic_launcher"
 android:label="@string/app_name"
 android:supportsRtl="true"
 android:theme="@style/AppTheme">
 <activity android:name=".Main2Activity"
 //添加screenOrientation屬性(portrait為保持豎屏,landscape為保持橫屏)
  android:screenOrientation="landscape">
  <intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
 </activity>
 </application>
</manifest>

(2)通過java代碼實現(xiàn):

import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
/**
 * Created by panchengjia on 2016/12/9.
 */
public class Test extends AppCompatActivity {
 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main2);
 //添加setRequestedOrientation方法實現(xiàn)鎖定橫屏(portrait為保持豎屏,landscape為保持橫屏)
 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
 }
}

現(xiàn)在第一種需求通過修改配置文件以及java代碼的方式實現(xiàn),但這里要注意的是當同時在配置文件以及java文件中設(shè)置了方向鎖定時,系統(tǒng)會以配置文件設(shè)置為準(可以理解為配置文件優(yōu)先級高于java代碼

二、Activity轉(zhuǎn)換方向時數(shù)據(jù)的保存

下面我們展示Activity轉(zhuǎn)換方向時未保存數(shù)據(jù)的情況:

演示中,我們通過記錄按鈕的點擊次數(shù)(土司)來判斷數(shù)據(jù)是否被保存

我們發(fā)現(xiàn)當屏幕(Acticity)由橫屏轉(zhuǎn)為豎屏時,數(shù)據(jù)未實現(xiàn)保存,繼續(xù)從0開始計數(shù)點擊次數(shù)。

當我們設(shè)置保存數(shù)據(jù)后,演示情況如下:

保存數(shù)據(jù)后,點擊數(shù)土司會繼續(xù)豎屏狀態(tài)的數(shù)據(jù)更新,而不是從零重新開始。

針對數(shù)據(jù)保存我們同樣有兩種方法實現(xiàn),分別為在java代碼中使用onSaveInstanceState()方法以及在屬性。

下面我們詳細分析這兩種方法的實現(xiàn):

(1)onSaveInstanceState詳解

實現(xiàn)代碼如下(這里寫了Activity的全部生命周期,并打印log用于分析性能):

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
/**
 * Created by panchengjia on 2016/12/9.
 */
public class Main2Activity extends AppCompatActivity {
 int num=1;//初始點擊次數(shù)為1
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main2);
 if(savedInstanceState!=null){
  num=savedInstanceState.getInt("data");
 }
 Log.i("Tag","onCreate");
 }
 //設(shè)置點擊事件土司記錄數(shù)據(jù)
 public void show(View v){
 Toast.makeText(this, num++ +"", Toast.LENGTH_SHORT).show();
 }
 @Override
 protected void onSaveInstanceState(Bundle outState) {
 super.onSaveInstanceState(outState);
 outState.putInt("data",num);
 Log.i("Tag","onSaveInstanceState");
 }
 @Override
 protected void onStart() {
 super.onStart();
 Log.i("Tag","onStart");
 }
 @Override
 protected void onResume() {
 super.onResume();
 Log.i("Tag","onResume");
 }
 @Override
 protected void onRestart() {
 super.onRestart();
 Log.i("Tag","onRestart");
 }
 @Override
 protected void onPause() {
 super.onPause();
 Log.i("Tag","onPause");
 }
 @Override
 protected void onStop() {
 super.onStop();
 Log.i("Tag","onStop");
 }
 @Override
 protected void onDestroy() {
 super.onDestroy();
 Log.i("Tag","onDestroy");
 }
}

功能實現(xiàn)的核心代碼為protected void onSaveInstanceState(Bundle outState)方法。Activity旋轉(zhuǎn)前后的Log如下:

從Log中可以得知屏幕(Acticity)旋轉(zhuǎn)時,會銷毀之前的Activity,然后重建旋轉(zhuǎn)后的Activity。

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

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

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.example.administrator.day18">
 <application
 android:allowBackup="true"
 android:icon="@mipmap/ic_launcher"
 android:label="@string/app_name"
 android:supportsRtl="true"
 android:theme="@style/AppTheme">
 <activity android:name=".Main2Activity"
 //添加configChanges屬性  android:configChanges="orientation|keyboard|screenSize">
  <intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
 </activity>
 <!--<activity android:name=".Main2Activity"></activity>-->
 </application>
</manifest>

在java中添加對應的onConfigurationChanged()方法用于Log打印分析,方法本身在功能實現(xiàn)上無實際意義:

@Override
 public void onConfigurationChanged(Configuration newConfig) {
 super.onConfigurationChanged(newConfig);
 Log.i("Tag","onConfigurationChanged");
 }

屏幕旋轉(zhuǎn)前后Log如下(演示兩次旋轉(zhuǎn)):

從Log中可以得知屏幕(Acticity)旋轉(zhuǎn)時,使用第二種方法保存數(shù)據(jù)不會銷毀Activity,不用重復的銷毀建立Activity從而達到優(yōu)化內(nèi)存性能的目的。建議使用這種方法

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • Android 多層嵌套后的 Fragment 懶加載實現(xiàn)示例

    Android 多層嵌套后的 Fragment 懶加載實現(xiàn)示例

    這篇文章主要介紹了Android 多層嵌套后的 Fragment 懶加載實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Android設(shè)計模式系列之工廠方法模式

    Android設(shè)計模式系列之工廠方法模式

    工廠方法模式,往往是設(shè)計模式初學者入門的模式,的確,有人稱之為最為典型最具啟發(fā)效果的模式。接下來通過本文給大家介紹Android設(shè)計模式系列之工廠方法模式,感興趣的朋友一起學習吧
    2016-09-09
  • android 實現(xiàn)控件左右或上下抖動教程

    android 實現(xiàn)控件左右或上下抖動教程

    這篇文章主要介紹了android 實現(xiàn)控件左右或上下抖動教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Android 抽屜效果的導航菜單實現(xiàn)代碼實例

    Android 抽屜效果的導航菜單實現(xiàn)代碼實例

    本篇文章主要介紹了Android 抽屜效果的導航菜單實現(xiàn)代碼實例,這種側(cè)滑的抽屜效果的菜單很好,有興趣的可以了解一下。
    2016-12-12
  • Android 的觸摸事件詳解及示例代碼

    Android 的觸摸事件詳解及示例代碼

    本文主要介紹Android 的觸摸事件,這里整理了詳細的資料,并附代碼示例,希望能幫助到有需要的小伙伴
    2016-09-09
  • Android中Window添加View的底層原理

    Android中Window添加View的底層原理

    這篇文章主要介紹了Android中Window添加View的底層原理,需要的朋友可以參考下
    2016-03-03
  • Android View的事件分發(fā)詳解

    Android View的事件分發(fā)詳解

    我們在學習View的時候,不可避免會遇到事件的分發(fā),而往往遇到的很多滑動沖突的問題都是由于處理事件分發(fā)時不恰當所造成的。因此,深入了解View事件分發(fā)機制的原理,對于我們來說是很有必要的。
    2017-12-12
  • Android Studio中的Gradle依賴深入講解

    Android Studio中的Gradle依賴深入講解

    Android Studio由于使用了gradle的進行項目構(gòu)建,使我們開發(fā)app方便很多,下面這篇文章主要給大家介紹了關(guān)于Android Studio中Gradle依賴的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-09-09
  • 基于Flutter實現(xiàn)風車加載組件的制作

    基于Flutter實現(xiàn)風車加載組件的制作

    Flutter官方提供了諸如 CircularProgressIndicator和 LinearProgressIndicator兩種常見的加載指示組件,但是說實話,實在太普通,所以本文將用Flutter自定義一個風車加載組件,需要的可以參考一下
    2022-03-03
  • Android權(quán)限機制帶來的一些安全問題介紹

    Android權(quán)限機制帶來的一些安全問題介紹

    這篇文章主要介紹了Android權(quán)限機制帶來的一些安全問題介紹,本文講解了權(quán)限機制的缺陷和不足、樹立權(quán)限意識、越過權(quán)限機制等內(nèi)容,需要的朋友可以參考下
    2015-04-04

最新評論