當前位置:首頁 » 安卓系統 » androidactivity旋轉

androidactivity旋轉

發布時間: 2022-08-04 13:44:16

㈠ android多個fragment怎麼處理屏幕旋轉

要回答這個問題,我們要先討論一些開發者在Activity生命周期中使用長時間後台任務時遇到的共同困難。然後,我們將介紹常見的兩種能解決問題但有不好的方法。最後,我們會用一個示例代碼說明推薦的解決方案,它用retained fragment來達到我們的目標。

配置改變&後台線程(Configuration Changes & Background Tasks)

配置發生變化以及銷毀和重新創建穿越了整個Activity的生命周期,並且引出一個問題,那就是這些事件的發生是不可預測並且在任何時候都可能觸發。並發的後台線程只加劇了這個問題。假設在Activity中啟動了一個AsyncTask,然後用戶馬上旋轉屏幕,這會導致Activity被銷毀和重新創建。當AsyncTask最後完成它的任務,它會將結果反饋到舊的Activity實例,完全沒有意識到新的activity已經被創建了。似乎這不是一個問題,新的Activity實例又會讓浪費寶貴的資源重新啟動一個後台線程,而不知道舊的AsyncTask已經在運行。由於這些原因,在配置變化的時候我們需要正確、有效地保存在Activity實例的活動對象。

不好的實踐:保存整個Activity

可能最有效和最常被濫用的解決方法是通過在Android manifest中設置android:configChanges屬性禁止默認的銷毀和重新創建行為。這個簡單的方法使得它對開發者很有吸引力;然而Google的工程師建議不這么做。主要的擔憂是:配置後,需要你在代碼中手動處理設備的配置變化。處理配置變化需要你採取很多額外的處理,以確保每一個字元串、布局、繪圖、尺寸等與當前設備的配置一致。如果你不小心,那麼你的應用程序可能會有一系列與資源定製方面有關的Bug。

另一個Google不鼓勵使用它的原因是許多開發者錯誤地認為,設置android:configChanges = "orientation"(這只是舉例說明),會神奇地避免他們的Activity在不可預知的場景中被銷毀和重新創建。其實不是這樣的。有多種原因可能導致配置發生變化,而不單單是屏幕橫豎屏的變化。將你的手機中的內容顯示在顯示器上,更改默認語言,修改設備默認的字體縮放,這三個簡單的例子都有可能觸發設備的配置變化。這些事件會向系統發出信號,銷毀並重建所有正在運行的Activity,在它們下一次resume的時候。所以設置android:configChanges屬性一般不是好的做法。

已經被棄用的方法:重寫()

在Honeycomb發布前,跨越Activity實例傳遞活動對象的推薦方法是重寫()和()方法。使用這種方法,傳遞跨越Activity 實例的活動對象僅僅需要在()將活動對象返回,然後在()中取出。截止API 13,這些方法都已經被棄用,以支持更有效的Fragment的setRetainInstance(boolean)方法。它提供了一個更簡潔,更模塊化的方式在配置變化的時候保存對象。我們將在下一節討論以Fragment為基礎的方法。

推薦的方法:在Retained Fragment中管理對象

自從Android3.0推出Fragment。跨越Activity保留活動對象的推薦方法是在一個Retained Fragment中包裝和管理它們。默認情況下,但配置發生變化時,Fragment會隨著它們的宿主Activity被創建和銷毀。調用Fragment#setRetaininstance(true)允許我們跳過銷毀和重新創建的周期。指示系統保留當前的fragment實例,即使是在Activity被創新創建的時候。不難想到使用fragment持有像運行中的線程、AsyncTask、Socket等對象將有效地解決上面的問題。

㈡ Android手機屏幕旋轉的生命周期執行

1.啟動Activity:系統會先調用onCreate方法,然後調用onStart方法,最後調用onResume,Activity進入運行狀態。
2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。
3.當前Activity由被覆蓋狀態回到前台或解鎖屏:系統會調用onResume方法,再次進入運行狀態。
4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居後台:系統會先調用onPause方法,然後調用onStop方法,進入停滯狀態。
5.用戶後退回到此Activity:系統會先調用onRestart方法,然後調用onStart方法,最後調用onResume方法,再次進入運行狀態。
6.當前Activity處於被覆蓋狀態或者後台不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而後用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。
7.用戶退出當前Activity:系統先調用onPause方法,然後調用onStop方法,最後調用onDestory方法,結束當前Activity。

㈢ Android如何禁止第三方APP旋轉屏幕

禁止屏幕隨手機旋轉變化
有時候我們希望讓一個程序的界面始終保持在一個方向,不隨手機方向旋轉而變化:
在AndroidManifest.xml的每一個需要禁止轉向的Activity配置中加入android:screenOrientation=」landscape」 屬性。

landscape = 橫向
portrait = 縱向

避免在轉屏時重啟Activity
android中每次屏幕方向切換時都會重啟Activity,所以應該在Activity銷毀前保存當前活動的狀態,在Activity再次 Create的時候載入配置,那樣,進行中的游戲就不會自動重啟了!
要避免在轉屏時重啟Activity,可以通過在AndroidManifest.xml文件中重新定義方向(給每個Activity加上 android:configChanges=」keyboardHidden|orientation」屬性)。
在需要控制屏幕顯示方向的Activity中重寫 onConfigurationChanged(Configuration newConfig)方法,這樣在轉屏時就不會重啟Activity了。

復制代碼
if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) {
//橫向
setContentView(R.layout.file_list_landscape);
} else {
//豎向
setContentView(R.layout.file_list);
}
復制代碼

復制代碼
<activity android:name="com.myapp.MyActivity"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:configChanges="orientation"
>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
復制代碼
android:screenOrientation=」landscape」
android:configChanges=」keyboardHidden|orientation」

復制代碼
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);

if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) {
//橫向
setContentView(R.layout.file_list_landscape);
} else {
//豎向
setContentView(R.layout.file_list);
}
}
復制代碼
在模擬器中可以按 CTL+F11 模擬做屏幕旋轉。

㈣ android 不是activity怎麼監測屏幕旋轉

Camera相關的程序,被屏幕旋轉搞得頭大,一方面得考慮屏幕旋轉後布局的變化,另一方面得搞清楚屏幕的旋轉方向、角度與Camera的Preview角度的關系。本來通過重載Activity的onConfigurationChanged方法,可以檢測到屏幕旋轉,但發現有一個問題,它只能檢測水平方向與垂直方向的切換,無法檢測180度的跳轉(例如:水平方向突然轉180度到水平方向),所以最後不得不換成OrientationEventListener方法來解決問題。在這里分享下經驗,並就此順便總結下Android開發中屏幕旋轉的處理吧。

1. 不做任何處理的情況下

如果沒有針對性地做任何處理的話,默認情況下,當用戶手機的重力感應器打開後,旋轉屏幕方向,會導致app的當前activity發生onDestroy-> onCreate,會重新構造當前activity和界面布局,很多橫屏/豎屏的布局如果沒有很好的設計的話,轉換為豎屏/橫屏後,會顯示地很難看。

如果想很好地支持屏幕旋轉,則建議在res中建立layout-land和layout-port兩個文件夾,把橫屏和豎屏的布局文件放入對應的layout文件夾中。

2. 如何設置固定的屏幕方向

在AndroidManifest.xml對應的 activity 屬性中,添加:

android:screenOrientation="landscape" //橫屏
android:screenOrientation="portrait" //豎屏

那麼,默認的情況下,應用啟動後,會固定為指定的屏幕方向,即使屏幕旋轉,Activity也不會出現銷毀或者轉向等任何反應。

3. 強制開啟屏幕旋轉效果

如果用戶的手機沒有開啟重力感應器或者在AndroidManifest.xml中設置了android:screenOrientation,默認情況下,該Activity不會響應屏幕旋轉事件。如果在這種情況下,依然希望Activity能響應屏幕旋轉,則添加如下代碼:

// activity的 onCreate 函數中
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);

4. 屏幕旋轉時,不希望activity被銷毀

如果希望捕獲屏幕旋轉事件,並且不希望activity 被銷毀,方法如下:

(1)在AndroidManifest.xml對應的activity屬性中,添加:

android:configChanges="orientation|screenSize"

(2)在對應的activity中,重載函數onConfigurationChanged

@Override
public voidonConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}

在該函數中可以通過兩種方法檢測當前的屏幕狀態:

第一種:

判斷newConfig是否等於Configuration.ORIENTATION_LANDSCAPE,Configuration.ORIENTATION_PORTRAIT

當然,這種方法只能判斷屏幕是否為橫屏,或者豎屏,不能獲取具體的旋轉角度。

第二種:

調用this.getWindowManager().getDefaultDisplay().getRotation();

該函數的返回值,有如下四種:

Surface.ROTATION_0,Surface.ROTATION_90,Surface.ROTATION_180,Surface.ROTATION_270

其中,Surface.ROTATION_0 表示的是手機豎屏方向向上,後面幾個以此為基準依次以順時針90度遞增。

(3) 這種方法的Bug

最近發現這種方法有一個Bug,它只能一次旋轉90度,如果你突然一下子旋轉180度,onConfigurationChanged函數不會被調用。

㈤ android 兩個activity之間怎麼進行帶動畫的翻轉切換

//實現淡入淺出的效果
startActivity(new Intent(MainActivity.this,SecondActivity.class));
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
// 由左向右滑入的效果
startActivity(new Intent(MainActivity.this,SecondActivity.class));
overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);
你可以去網路下這個方法overridePendingTransition。

㈥ 怎樣讓android開發程序不隨著屏幕轉動啊

1.在AndroidManifest.xml的每一個需要禁止轉向的Activity配置中加入 android:screenOrientation=」landscape」 屬性。 landscape = 橫向 portrait = 縱向 2.android中每次屏幕方向切換時都會重啟Activity,所以應該在Activity銷毀前保存當前活動的。

禁止屏幕隨手機旋轉變化 有時候我們希望讓一個程序的界面始終保持在一個方向,不隨手機方向旋轉而變化: 在AndroidManifest.xml的每一個需要禁止轉向的Activity配置中加入android:screenOrientation=」landscape」 屬性。 landscape = 橫向 portra。

在manifest文件中加入 screenOrientation=「portrait」 限制屏幕豎屏顯示 screenOrientation=「landscape」 限制屏幕橫屏顯示

使用嵌套布局 相對布局裡面嵌套一個線性布局 可以防止出現解析度混亂 這里我們使用相對布局嵌套一個線性布局可以完成 標題在最上方 最下方是一個ActivityGroup 右邊的abcdef。選項條在最右邊 這3個都是相對布局裡的元素 然後 中間是一個線性布。

LZ可以試試android:screenOrientation="portrait"強制豎屏,然後通過感測器來檢測是否旋轉了屏幕。LZ可以先嘗試一下啊加速度感測器看看,這個應該每個手機都會有

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE););//強制為橫屏 或者在AndroidManifest.xml 裡面添加android:screenOrientation=」landscape」

Android 平台提供了兩類動畫,一類是 Tween 動畫,即通過對場景里的對象不斷做圖像變換(平移、縮放、旋轉)產生動畫效果;第二類是 Frame 動畫,即順序播放事先做好的圖像,跟電影類似。本文分析 Tween動畫的rotate實現旋轉效果。

㈦ 如何在 Android 程序中禁止屏幕旋轉和重啟Activity

1.在androidmanifest.xml的每一個需要禁止轉向的activity配置中加入
android:screenorientation=」landscape」
屬性。
landscape
=
橫向
portrait
=
縱向
2.android中每次屏幕方向切換時都會重啟activity,所以應該在activity銷毀前保存當前活動的狀態,
在activity再次
create的時候載入配置,那樣,進行中的游戲就不會自動重啟了!
要避免在轉屏時重啟activity,可以通過在androidmanifest.xml文件中重新定義方向(給每個activity
加上
android:configchanges=」keyboardhidden|orientation」屬性)。
在需要控制屏幕顯示方向的activity中重寫
onconfigurationchanged(configuration
newconfig)方
法,這樣在轉屏時就不會重啟activity了

㈧ 當Android旋轉屏幕導致橫豎屏切換時,如何保存當前Fragment的實例

總結了以下幾種情況:

  • 設備旋轉時保存Activity的交互狀態: onSaveInstanceState();

  • 設備旋轉時保存Fragment的交互狀態: setRetainInstance(true);

  • 設備旋轉時保存WebView的數據:

  • android:configChanges="keyboardHidden|orientation|screenSize";

  • 設備旋轉時保存在自定義View中繪制的圖形。

如果Fragment不包含WebView,只是簡單的UI View,像是TextView, Button, CheckBox, ImageView... 不建議使用setRetainInstance方法,只需要記住當前fragment的index,然後在設備旋轉後根據數據重新實例化一個fragment。因為不包含大量數據,旋轉的過程中幾乎可以用「無縫切換」來形容。
如果包含WebView還是採用針對WebView的方法(題主的情況)。所以要看情況而定。

㈨ android7.1.2系統怎麼設置屏幕方向

摘要 方法一:在AndroidManifest.xml中配置

㈩ 如何設置android界面橫屏顯示

全屏

在Activity的onCreate方法中的setContentView(myview)調用之前添加下面代碼

requestWindowFeature(Window.FEATURE_NO_TITLE);//隱藏標題
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);//設置全屏

橫屏

按照下面代碼示例修改Activity的onResume方法

@Override
protected void onResume() {
/**
* 設置為橫屏
*/
if(getRequestedOrientation()!=ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
super.onResume();
}

或者在配置文件中對Activity節點添加android:screenOrientation屬性(landscape是橫向,portrait是縱向)

android:launchMode="singleTask" android:screenOrientation="portrait">

要設置成豎屏設置成 SCREEN_ORIENTATION_PORTRAIT

// ----------------

常亮

view.setKeepScreenOn(true)

不加任何旋轉屏幕的處理代碼的時候,旋轉屏幕將會導致系統把當前activity關閉,重新打開。
如果只是簡單的界面調整,我們可以阻止此問題的發生,屏幕旋轉而自己調整屏幕的元素重構。
首先我們需要修改AndroidManifest.xml文件:
<activity android:name=".Magazine">
</activity>
//修改為:
<activity android:name=".Magazine"
android:configChanges="orientation|keyboard">
</activity>
這樣是讓程序能夠響應旋轉屏幕的事件。
然後重寫onConfigurationChanged方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
Log.v(" == onConfigurationChanged");
processLayout();
}

//----------------------------

在我們用Android開發過程中,會碰到Activity在切換到後台或布局從橫屏LANDSCAPE切換到PORTRAIT,會重新切換Activity會觸發一次onCreate方法。

在Android開發中這種情況視可以避免的,我們可以在androidmanifest.xml中的activit元素加入這個屬性 android:configChanges="orientation|keyboardHidden" 就能有效避免oncreat方法的重復載入,

androidmanifest.xml內容如下:紅色字體為添加部分

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.demo"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".DemoGPS"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<uses-library android:name="com.google.android.maps" />

</application>
<uses-sdk android:minSdkVersion="7" />

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

</manifest>

同時在Activity的Java文件中重載onConfigurationChanged(Configuration newConfig)這個方法,這樣就不會在布局切換或窗口切換時重載等方法。代碼如下:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
{
//land
}
else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
{
//port
}
}

//------------------------------------------------------

關於Android中Activity的橫豎屏切換問題可以通過AndroidManifest.xml文件中的Activity來配置:

android:screenOrientation=["unspecified" | "user" | "behind" |
"landscape" | "portrait" |
"sensor" | "nonsensor"]

screenOrientation 用來指定Activity的在設備上顯示的方向,每個值代表如下含義:

"unspecified" 默認值 由系統來判斷顯示方向.判定的策略是和設備相關的,所以不同的設備會有不同的顯示方向.

"landscape" 橫屏顯示(寬比高要長)

"portrait" 豎屏顯示(高比寬要長)

"user" 用戶當前首選的方向

"behind" 和該Activity下面的那個Activity的方向一致(在Activity堆棧中的)

"sensor" 有物理的感應器來決定。如果用戶旋轉設備這屏幕會橫豎屏切換。

"nosensor" 忽略物理感應器,這樣就不會隨著用戶旋轉設備而更改了 ( "unspecified"設置除外 )。

更多安卓例子請去360手機助手下載安卓學習手冊,裡面有橫豎排例子,源碼,例子隨便看。

熱點內容
福建電信伺服器ip地址 發布:2025-01-19 23:07:24 瀏覽:647
伺服器怎麼製作公告欄 發布:2025-01-19 23:06:23 瀏覽:873
英雄聯盟皮膚源碼 發布:2025-01-19 22:56:14 瀏覽:94
三星手機忘記解鎖密碼怎麼辦 發布:2025-01-19 22:45:43 瀏覽:291
Java為什麼沒有預編譯命令 發布:2025-01-19 22:44:14 瀏覽:303
路由器上寫的初始無密碼什麼意思 發布:2025-01-19 22:42:38 瀏覽:847
mysql配置主從資料庫 發布:2025-01-19 22:35:33 瀏覽:730
4大資料庫 發布:2025-01-19 22:34:35 瀏覽:975
win10用什麼解壓 發布:2025-01-19 22:27:15 瀏覽:799
反編譯連接資料庫 發布:2025-01-19 22:07:55 瀏覽:787