Androidアプリを作成しています。このアプリでは、キャンバスにビューを描画しています。デバイスの向きが変わると、アクティビティが再起動します。
向きが変わったときにアクティビティを再開しないようにするにはどうすればよいですか?
さまざまな方法がありますが、 here のように、
Android:configChanges="keyboardHidden|orientation|screenSize"
必要に応じて、代わりに構成の変更をリッスンできます。その後、onConfigurationChanged
をオーバーライドしてsetContentView
を呼び出すことにより、これらの変更に対応します。
これは私がやってきた方法ですが、他の人の考えを知りたいと思います。
AndroidManifest.xmlでアクティビティを次のように定義します。
<activity
Android:name="com.name.SampleActivity"
Android:configChanges="keyboardHidden|orientation|screenSize"
Android:icon="@drawable/sample_icon"
Android:label="@string/sample_title"
Android:screenOrientation="portrait" >
</activity>
Android作成したマニフェストファイルAndroid:configChanges="orientation"
アクティビティについて。
Android:configChanges="keyboardHidden|orientation"
をactivity
に追加します
アクティビティタグにAndroid:configChanges="keyboardHidden|orientation|screenSize"
を記述しようとしましたが、動作しません。
多くの方法を試しましたが、すべてのアプリアクティビティにAndroid:configChanges="keyboardHidden|orientation|screenSize"
を追加するまで何も機能せず、完全に機能します。
フラグメントの使用をお勧めします。 setRetainInstance(true)
を使用して、フラグメントを保持することを通知できます。
xamarin
ユーザーの場合、
Androidの向きの変更時にアプリケーションが再起動しないようにするには、これを追加します
ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize
すべてのアクティビティクラスのアクティビティ属性に。たとえば、以下は私のデモコードです
[Activity(Label = "DemoApp", ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
{
protected override void OnCreate(Bundle bundle)
{
//Some code here
}
}
これをマニフェスト内のすべてのアクティビティに追加します。
Android:configChanges="orientation|screenSize"
例:
<activity Android:name=".activity.ViewActivity"
Android:label="@string/app_name"
Android:configChanges="orientation|screenSize"/>
keyboardHidden|orientation
での再起動を回避するには- Androidで方向の変更を無効にする方法
に従ってくださいAndroid APIガイド- ランタイム変更の処理
アプリケーションクラスの使用- Androidの回転時のアクティビティの再起動
マニフェストファイルのすべてのアプリアクティビティにAndroid:configChanges = "keyboardHidden | orientation | screenSize"を追加するだけです
これをAndroidManifest.xmlで宣言します
<activity Android:name=".complex_examples.VideoPlayerActivity"
Android:configChanges="keyboard|keyboardHidden|orientation
|screenSize|screenLayout|smallestScreenSize|uiMode"
Android:launchMode="singleTop"/>
しかし、気をつけてください、 Android Developers Documentation は、より良いオプションが残っていない場合にのみ行うべきだと言います。
注:この属性の使用は避け、最後の手段としてのみ使用してください。設定変更による再起動を適切に処理する方法の詳細については、ランタイム変更の処理をご覧ください。
確実に実行できる場合は、自分で onConfigurationChanged() メソッドで構成の変更を処理できます。