画面が回転しても、何も変更する必要はありません。アプリが最初に読み込まれたときにランダムな画像が表示され、デバイスを回転しても別のランダムな画像が選択されないはずです。この動作を停止する方法を教えてください。
画面が回転しても、何も変更する必要はありません。アプリが最初に読み込まれたときにランダムな画像が表示され、デバイスを回転しても別のランダムな画像が選択されないはずです。この動作を停止する方法を教えてください。
回答:
これを行うには、一般に3つの方法があります。
いくつかの回答が示唆しているように、初めて作成されたアクティビティとから復元されたアクティビティのケースを区別できますsavedInstanceState。これはonSaveInstanceState、のパラメータをオーバーライドしてチェックすることによって行われますonCreate。
マニフェストにを追加android:screenOrientation="portrait"(または"landscape")することで、アクティビティを1つの方向にロックでき<activity>ます。
あなたが指定することによって、自分の画面変更を処理するためのものというシステムを言うことができるandroid:configChanges="orientation|screenSize"で<activity>タグ。このようにして、アクティビティは再作成されませんが、代わりにコールバックを受け取ります(役に立たないため無視できます)。
個人的には(3)を使用します。もちろん、アプリをいずれかの方向にロックして問題がなければ、(2)を使用することもできます。
android:configChanges="orientation|screenSize"
android:configChanges="orientation|screenSize"私のために働く。ありがとう、@ Pacerier
android:configChanges="orientation|screenSize"多くの人があなたの答えをメインと見なしているので、API> = 13の値で回答ケース#3を更新してください!
Xionの答えは近いものでしたがandroid:configChanes="orientation"、アプリケーションのAPIレベルが12以下でなければ、#3()は機能しません。
APIレベル13以降では、向きが変わると画面サイズが変わるため、向きが変わると、アクティビティが破棄されて開始されます。
以下のように「screenSize」属性を追加するだけです。
<activity
android:name=".YourActivityName"
android:configChanges="orientation|screenSize">
</activity>
これで、向きを変更すると(そして画面サイズが変更されても)、アクティビティはその状態を維持し、 onConfigurationChanged()呼び出されます。これにより、向きが変わっても、画面上にあるもの(つまり、WebビューのWebページ)が保持されます。
このサイトからこれを学びました: http //developer.android.com/guide/topics/manifest/activity-element.html
また、これは明らかに悪い習慣であるため、ランタイムの変更の処理に関する以下のリンクをお読みください。
http://developer.android.com/guide/topics/resources/runtime-changes.html
android:configChanges="orientation|screenSize"
あなただけの中に移動するAndroidManifest.xml必要がありますまたはあなたの活動のラベルで、そこに誰かが言ったようにあなたはこのコード行を入力する必要があります:
android:configChanges="orientation|screenSize"
したがって、次のようなものになります。
<activity android:name="ActivityMenu"
android:configChanges="orientation|screenSize">
</activity>
うまくいきますように!
<activity android:name="com.example.abc"
android:configChanges="orientation|screenSize"></activity>
追加するだけ android:configChanges="orientation|screenSize"マニフェストファイルのアクティビティタブにです。
そのため、向きが変わってもアクティビティは再開されません。
onSaveInstanceState()してくださいonCreate()。
デフォルトではない動作を実行するよりも、向きの変更を適切に処理する方が実際に優れているのは、私の経験です。
現在表示されている画像を保存し、onSaveInstanceState()アプリケーションがonCreate()再度実行されるときに適切に復元する必要があります。
android:configChangesは避け、最後の手段としてのみ使用してください。構成変更による再起動を適切に処理する方法の詳細については、ランタイム変更の処理を参照してください。」
このソリューションは、断然最良のソリューションです。マニフェストファイルに追加
<activity
android:configChanges="keyboardHidden|orientation|screenSize"
android:name="your activity name"
android:label="@string/app_name"
android:screenOrientation="landscape">
</activity
そしてあなたの活動クラスに次のコードを追加します
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
//your code
} else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
//your code
}
}
マニフェストのすべてのアプリアクティビティタグに追加android:configChanges="keyboardHidden|orientation|screenSize"します。
マニフェストファイルで、各アクティビティにこれを追加します。これは役立ちます
android:configChanges = "orientation|keyboard|keyboardHidden|screenLayout|screenSize"
http://animeshrivastava.blogspot.in/2017/08/activity-lifecycle-oncreate-beating_3.html
@Override
protected void onSaveInstanceState(Bundle b)
{
super.onSaveInstanceState(b);
String str="Screen Change="+String.valueOf(screenChange)+"....";
Toast.makeText(ctx,str+"You are changing orientation...",Toast.LENGTH_SHORT).show();
screenChange=true;
}
onPause()またはにイメージの詳細を保存し、それonStop()をで使用しonCreate(Bundle savedInstanceState)てイメージを復元します。
編集:
実際のプロセスの詳細については、http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycleを参照してください。これは、Honeycombでは以前のAndroidバージョンとは異なるためです。
ただ使う: android:configChanges="keyboardHidden|orientation"
最善の解決策かどうかはわかりませんが、ここで説明します。
まず最初に、クラスの証明書が必要です。アプリケーションのアプリケーションは、このマニフェストにあります。
<application
android:name=".App"
...
第二に、私のクラスのアプリで私はこのようにしました:
public class App extends Application {
public static boolean isOrientationChanged = false;
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onConfigurationChanged(@NotNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ||
newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
isOrientationChanged = true;
}
}
}
3番目に、フラグを方向変更に設定する必要があります。私の場合、アプリナビゲーション内の前のアクティビティが呼び出されたときに常に設定するため、後のアクティビティが作成されたときに1回だけ呼び出します。
isOrientationChanged = false;
したがって、そのコンテキストで画面の向きを変更するたびに、この設定を変更するたびに設定し、向きが変更されているかどうかを確認します。変更されている場合は、そのフラグの値に基づいて検証します。
基本的に、非同期の改造リクエストを行うときはいつでもそれを使用する必要がありました。彼は方向を変えるたびに呼び出し、アプリケーションを常にクラッシュさせていました。
if (!isOrientationChanged) {
presenter.retrieveAddress(this, idClient, TYPE_ADDRESS);
}
それが最もエレガントで美しい解決策かどうかはわかりませんが、少なくともここでは機能的です:)
をonCreate含むアクティビティの、メソッドの後にこのコードを追加しますWebView
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
}
Screen.lockOrientation(this)から呼び出してください。マニフェストではできないロックを解除できます。