[解決済み] Androidのローテーションでアクティビティを再開する
質問
Androidアプリケーションで、端末を回転させると(キーボードをスライドさせると)、キーボードが表示されなくなります。
Activity
は再起動されます (
onCreate
が呼び出される)。さて、これはおそらくこうあるべきなのでしょうが、私は多くの初期セットアップを
onCreate
メソッドがあるので、どちらかが必要です。
- すべての初期設定を別の関数に置き、デバイスの回転ですべてが失われないようにする、または
-
そうすることで
onCreate
が再び呼び出されることはなく、レイアウトが調整されるだけです。 -
アプリを縦長に限定することで
onCreate
が呼び出されないようにします。
解決方法は?
アプリケーションクラスの使用
初期化で何をするのかにもよりますが、このクラスを継承した新しいクラスを作成することもできます。
Application
を作成し、初期化コードをオーバーライドされた
onCreate
メソッドを作成します。
public class MyApplicationClass extends Application {
@Override
public void onCreate() {
super.onCreate();
// TODO Put your application initialization code here.
}
}
は
onCreate
は、アプリケーション全体の作成時にのみ呼び出されるため、方向やキーボードの可視性の変更に伴うActivityの再スタートは、これをトリガーにしない。
このクラスのインスタンスをシングルトンとして公開し、初期化するアプリケーション変数をゲッターとセッターを使って公開するのは良い習慣です。
注: 新しい Application クラスを登録して使用するには、マニフェストでその名前を指定する必要があります。
<application
android:name="com.you.yourapp.MyApplicationClass"
設定変更への対応 [UPDATE: これはAPI 13以降非推奨です。 推奨される代替手段を参照してください。 ]
さらに、アプリケーションが再起動するようなイベント(方向やキーボードの可視性の変化など)をリッスンして、Activityの中で処理することも可能です。
まず
android:configChanges
ノードをアクティビティーのマニフェスト・ノードに追加します。
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
または Android 3.2 (APIレベル13) 以上 :
<activity android:name=".MyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name">
そしてActivityの中で
onConfigurationChanged
メソッドを呼び出し
setContentView
を使用して、GUIレイアウトを新しい方向で再実行することを強制します。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.myLayout);
}
関連
-
adb シェルがデバイスのオフラインを求めるプロンプトを表示する
-
java.lang.NullPointerException: NULLオブジェクト参照で仮想メソッド......を呼び出そうとしました。
-
Android Studio http://schemas.android.com/apk/res/android 「URIが登録されていません」の解決方法について
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] アプリケーションを終了することは嫌われますか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】Androidで透明なActivityを作成する方法は?
-
[解決済み】Androidで向きを変えないようにするにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
android E/RecyclerView﹕ アダプタが接続されていないため、レイアウトをスキップする。
-
GIF、Lottie、SVGA
-
AndroidがMainActivityが包含クラスでないというエラーを報告する
-
アンドロイドプロジェクトのパッケージングにgradleを使用する際の問題点
-
例外「指定された子にはすでに親がいます」の解決方法。removeViewを呼び出す必要があります" の解決方法(ソースコード付き例)
-
android block certificate validation CertPathValidatorException: 認証パスのトラストアンカーが見つかりません
-
Error:A problem occurred configuring project ':app'. > ビルドを見つけられませんでした。
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み】プログレスダイアログとバックグラウンドスレッドがアクティブなときに、画面の向きが変わるのをどう処理するか?
-
[解決済み】デバイスを振ったときにアプリを更新するには?