1

現在、アプリの更新に取り組んでいます。次の問題が発生しました。横向きと縦向きをサポートしたいので、2つの異なるレイアウトを作成しました。

私の最初の問題は、ローテーション後にアプリケーションが再起動し、フラッシュされた場所に番号が設定されたことでした。

これは、stackoverflowでこの質問を見つけた後、簡単に修正できました。

私はその問題に対して次の解決策を実装しました:

@Override
public void onConfigurationChanged(Configuration newConfig) {
     super.onConfigurationChanged(newConfig);
     setGui();
   }

レイアウトに応じてホイールのレイアウトを調整する次のコードでテストしました。これもすべて正常に機能します。向きを変えても数字は変わりません。

public void setGui() {
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        initWheel(R.id.money1, 0, 9, "%1d", moneyWidthPortrait, textSizePortrait);
        ...
    } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        initWheel(R.id.money1, 0, 9, "%1d", moneyWidthLandscape, textSizeLandscape);
        ...
    }
}

ただし、背景とレイアウト(パディングとマージン)も変更したいので、次の2行を追加しました。

public void setGui() {
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        setContentView(portrait);
        ...
    } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setContentView(landscape);
        ...
    }
}

しかし、setContentViewを呼び出した後、すべてのデータが再び失われたように見え、電話の向きを変更した後、ホイールはゼロにリセットされます。

向きやレイアウトの変更中にホイールが「0」にリセットされないようにするための最善の方法は何ですか?

編集:回答後に編集

削除しました:

android:configChanges="keyboardHidden|orientation"

そして追加:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  savedInstanceState.putInt("WheelMoney1", getWheelValue(R.id.money1));
  ...
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  getWheel(R.id.money1).setCurrentItem(savedInstanceState.getInt("WheelMoney1"), false);
  ...
}

そして、2つの異なるレイアウトを処理するために実装layout-landされました。layout-port

4

2 に答える 2

3

onSaveInstanceStateonRestoreInstanceStateを実装する必要があるようです

于 2011-06-13T18:55:44.600 に答える
2

方向を変更するときに呼び出す必要はありませんsetContentView。正しいレイアウト ディレクトリに同じ名前でレイアウトを保存すると、Android がこれを行います。例えば:

res/layout-land/main.xml
res/layout-port/main.xml

アクティビティが向きを切り替えると、Android は正しいレイアウトを読み込みます。

于 2011-06-13T18:52:09.883 に答える