4

アクティビティと、アクティビティ用の 2 つのレイアウト (横向きモードと縦向きモード用に 1 つずつ) を作成しました。どちらのレイアウトも同じビューと ID を持っています。マニフェスト ファイルで android:configChanges="orientation"は、アクティビティに追加しました。

現在、ドキュメントによると、configChanges に言及してメソッドを含めると、アクティビティは再開されませんonConfigurationChanged

onCreate(Bundle savedInstanceState) {
    Log.i("Message","inside oncreate()") ;
}

onConfigurationChanged(Configuration newConfig) {
    Log.i("Message","inside onconfigurationchanged()") ;
}

向きを変更すると、ログに両方のメッセージが表示されます。向きが変わったときに onCreate() メソッドが呼び出されないようにする方法はありますか?

4

2 に答える 2

8

ドキュメンテーションが「方向」について述べているように、Androidで特定のAPIを開始すると、方向は他のフラグで構成されるため、無視したい構成の変更をさらに追加できるかもしれません。

画面の向きが変更されました — ユーザーがデバイスを回転させました。注: アプリケーションが API レベル 13 以上 (minSdkVersion 属性と targetSdkVersion 属性で宣言) をターゲットにしている場合は、「screenSize」構成も宣言する必要があります。これは、デバイスが縦向きと横向きの間で切り替わったときにも変更されるためです。

を使ってみて、それが役に立ったかどうか教えてください:

android:configChanges=orientation|screenSize"

「screenSize」に関するドキュメントは次のとおりです。

現在利用可能な画面サイズが変更されました。これは、現在の縦横比に対する現在使用可能なサイズの変化を表しているため、ユーザーが横向きと縦向きを切り替えると変化します。ただし、アプリケーションが API レベル 12 以下をターゲットにしている場合、アクティビティは常にこの構成変更自体を処理します (Android 3.2 以降のデバイスで実行されている場合でも、この構成変更によってアクティビティが再開されることはありません)。API レベル 13 で追加されました。


編集:これが機能することを示す簡単なコードです:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("Message","inside oncreate()");
    }

    @Override
    public void onConfigurationChanged(final Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.i("Message","inside onconfigurationchanged()");
    }
}

マニフェスト:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.test" android:versionCode="1"
  android:versionName="1.0">

  <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />

  <application android:allowBackup="true" android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" android:theme="@style/AppTheme">
    <activity android:name="com.example.test.MainActivity"
      android:label="@string/app_name" android:configChanges="orientation|screenSize">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
  </application>

</manifest>
于 2013-06-28T12:18:16.897 に答える
1

公式ドキュメントによると、マニフェストの「向き」は画面の向きが変わったときの再起動を防ぐことができ、「keyboardHidden」はキーボードの可用性が変わったときの再起動を防ぐことができると述べています。マニフェストで次のコードを宣言するだけです。

<activity android:name=".MyActivity"
      android:configChanges="orientation|keyboardHidden"
      android:label="@string/app_name">

それは私のプロジェクトで機能します。うまくいかない場合は、「keyboardHidden」を「screenSize」に変更してみてください。

于 2013-12-19T04:25:42.340 に答える