ホームページ  >  記事  >  Java  >  Android アクティビティの水平および垂直画面切り替えライフ サイクル

Android アクティビティの水平および垂直画面切り替えライフ サイクル

高洛峰
高洛峰オリジナル
2017-01-07 15:55:532021ブラウズ

前書き

開発では、水平画面と垂直画面の切り替えに対処する必要があることがよくあります。最初にどのように対処するかはライフサイクルによって異なります

ステートメント

アクティビティは、水平画面と垂直画面を切り替えるときに、2 つの関数をコールバックする必要があります。したがって、これら 2 つの関数は一時的にアクティビティの水平および垂直画面の切り替えライフ サイクルの一部とみなされます。これら 2 つの機能は次のとおりです

プログラムを起動し、次に入ります。アクティビティインターフェース

2. 画面を回転します

Android Activity 横竖屏切换的生命周期

3. 再度画面を回転します

4 AndroidManifest.xml で Android Activity 横竖屏切换的生命周期

android:configChanges="orientation|screenSize" を設定します。各ライフサイクルを呼び出すと、onConfigurationChanged メソッドのみが実行されます

注:

MiniSdkVersion が 13 以上である場合: android:configChanges="orientation" または android:configChanges="orientation|keyboardHidden" それぞれを思い出してくださいライフサイクル Android Activity 横竖屏切换的生命周期

MiniSdkVersion が 13 未満の場合

(1) Activity の android:configChanges が設定されていない場合、再度画面が切り替わります 各ライフサイクルの呼び出しは横画面への切り替え時に 1 回実行され、実行されます縦画面切り替え時に2回

(2) アクティビティの android:configChanges="orientation" を設定すると、横画面に切り替えたときにも各ライフサイクルが再度呼び出されますが、画面が縦画面の場合は 1 回だけ実行されます

(3) アクティビティの android:configChanges="orientation|keyboardHidden" を設定すると、画面切り替えは各ライフサイクルを再呼び出しせず、onConfigurationChanged メソッドのみが実行されます

5. 画面切り替えを回避し、アクティビティを再ウォークします。ライフサイクル

上記の画面切り替えライフサイクルから、ビデオ再生中の画面回転などの不要なトラブルを避けるために、各スイッチが再作成されることがわかります。ライフサイクルの再実行を避ける方が良い解決策です。

(1) Android 2.3以前のバージョン android:configChanges="orientation|keyboardHidden"

(2) Android 3.0以降のバージョン android:configChanges="orientation|screenSize"

横画面と縦画面の設定

Androidの横画面と縦画面携帯電話開発における横画面と縦画面の切り替えは、開発プロセス中に不要なトラブルを避けるために、多くのソフトウェアでは通常、横画面と縦画面の切り替えを禁止しています。

1. これを実現するには、AndroidManifest.xml のアクティビティに android:screenOrientation 属性値を設定します。

(1) 縦画面: android:screenOrientation="portrait"

(2) 横画面: android:screenOrientation="landscape"

2. 以下のようなコードを通じて Java コードで設定します (このメソッドは非対応です)推奨)、大きいアプリを別方向で起動すると遅くなります)

(1)縦画面:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

(2)横画面:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

の3つです。反転を完全に禁止したい場合は、重力センサーによる切り替えを無視します (シミュレーターでは機能しませんが、実機では正しいです)

(1) 重力を無視: android:screenOrientation="nosensor"

水平と縦画面の認識

1. onConfigurationChanged で画面の向きの変更を有効にするには、次の条件が必要です

(1) AndroidManifest.xml に権限を追加します:

(2) AndroidManifest.xml に設定されている MiniSdkVersion 属性と TargetSdkVersion 属性が 13 以上である

(3) 次を追加: android:configChanges=" AndroidManifest.xml (Configuration newConfig) のアクティビティの onConfigurationChanged にあるkeyboard|screenSize|orientation|layoutDirection"

(4) を判断して

onSaveInstanceState(Bundle outState) :Activity 即将销毁时保存数据
onRestoreInstanceState(Bundle savedInstanceState) : Activity 重建或者恢复时候取出数据

2. 画面が横画面に切り替わったときにシステムが呼び出しますのでもう一度アクティビティの onCreate メソッドを使用して、onCreate で現在の方向を確認し、setContentView に別のレイアウト XML をロードさせます。

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation == 1)//竖屏
if(newConfig.orientation == 2)// 横屏
}

注: このメソッドは、AndroidManifest で onConfigurationChanged を設定せずにライフサイクルを再起動することにより、高さと幅が変更され、別のレイアウトが必要になる可能性があります。以下の方法でレイアウトを切り替えることができます

(1) resディレクトリにlayout-landディレクトリとlayout-portディレクトリを作成します。対応するレイアウトファイル名はmain.xmlなどのままです。 layout-land は水平画面レイアウト、layout-port は垂直画面レイアウトです。その他については心配する必要はありません。シミュレータが自動的にそれらを見つけます。

(2) 上記の横画面と縦画面の認識において、横画面と縦画面が変化した場合、onCreate()またはonConfigurationChanged()で方向を決定し、対応するメソッドでsetContentViewを再設定して別のレイアウトXMLレイアウトファイルを読み込みます

横画面と縦画面の切り替えデータの保存と読み込み

さらに、Android の各画面切り替えはアクティビティを再起動するため、アクティビティが破棄される前に現在のアクティビティのステータスを保存する必要があり、アクティビティの作成時に設定が読み込まれます。このようにすると、進行中のゲームは自動的に再起動されません。

アクティビティデータの保存

(1) システムリソースの制約または画面の回転によりアクティビティが破棄または再作成された場合、ユーザーがこのアクティビティに戻ったときに、システムはこのアクティビティの存在の記録を保持します。保存されたレコード データ (インスタンスの状態) は、Bundle オブジェクトに保存されているいくつかのキーと値のペアです。システムはデフォルトで Bundle を使用して情報を保存します

(2) 追加のデータをインスタンスの状態に保存するには、この Callback 関数を onSaveInstanceState(Bundle outState) に書き換えると、アクティビティが異常に破棄されたときにシステムが Bundle オブジェクトを渡すため、Bundle に追加情報を追加してシステムに保存できます。アクティビティが破棄された後にシステムがこのアクティビティ インスタンスを再作成したい場合、以前の Bundle オブジェクトが (システムに) アクティビティの

に渡されます (3) アクティビティが停止し始めると、システムは onSaveInstanceState(Bundle) を呼び出しますoutState)、アクティビティはキーと値のペアのコレクションを使用して状態情報を保存できます。このメソッドは、EditText コンポーネント内のテキストや ListView のスライド位置など、アクティビティ ビューのステータス情報をデフォルトで保存します

アクティビティ データの回復

(1) アクティビティが Destory から再構築されるときに、取得できますシステムによって渡されたアクティビティのバンドルから保存された状態を復元します。 onCreate() コールバック メソッドと onRestoreInstanceState() コールバック メソッドは両方とも、同じインスタンス状態情報を含む同じバンドルを受け取ります。

(2) onCreate() メソッドは、新しい Activity インスタンスが初めて作成されるときと、以前に Destoryed インスタンスが再作成されるときに呼び出されるため、読み取りを試みる前に Bundle オブジェクトが null かどうかを確認する必要があります。それ。 null の場合、システムは以前に Destoryed したアクティビティを復元する代わりに、新しいアクティビティ インスタンスを作成します。

(3) onCreate メソッドでデータを復元する代わりに、onRestoreInstanceState() を実装することも選択できます。 onRestoreInstanceState() メソッドは、onStart() メソッドの後に実行されます。システムは、復元する必要がある状態情報がある場合にのみ onRestoreInstanceState() を呼び出すため、バンドルが null かどうかを確認する必要はありません。

以上、編集者が紹介したAndroidアクティビティの縦横画面切り替えのライフサイクルに関する知識が皆様のお役に立てれば幸いです!

Android アクティビティの水平および垂直画面切り替えのライフサイクルに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。