向きの変更時に VIEW レイアウトを調整したいと思います。
私のマニフェストは次のように設定されてandroid:configChanges="keyboardHidden|orientation"
います。
私はres/layout-land
、を持っていres/layout-port
ます。
私は持っonConfigurationChanged
ていますActivity
(ローテーションで呼び出されます)。
私のActivity
中には があり、ViewFlipper
その中には がありLinearLayouts
ます。
Activity
ポートモードまたはランドモードで開始すると、ビューのレイアウトは正しいです(私のres/layout-????
ファイルによると)。
しかし、すでに にいActivity
て電話を回転させても、View レイアウトは変更されません。画面が回転し、onCreate
アクティビティの が呼び出されず、本来onConfigurationChanged
は で呼び出されますが、起動時に読み込まれた でActivity
常に画面が再描画されます。LinearLayout
Activity
で何かを見逃しているような気onConfigurationChanged
がしますが、何がわかりません。内部にあるViewFlipper
または で何らかの関数を呼び出す必要があると思います。LinearLayout
どの関数を呼び出す必要がありますか?
ViewFlipper flipper;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
flipper = new ViewFlipper(getApplicationContext());
setContentView(flipper);
initLayout();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(flipper);
}
void initLayout() {
MyView myview = createMyView(0);
flipper.addView(myview, 0);
myview = createMyView(1);
flipper.addView(myview, 1);
myview = createMyView(1);
flipper.addView(myview, 1);
}
追加しようとしflipper = new ViewFlipper(getApplicationContext());
ましonConfigurationChanged()
たが、回転後にすべてが黒くなりました。私はinitLayoutを呼び出す必要があると思いますが、それはすべてを再計算します(そして、それはまさに私がやりたくないことですonConfigurationChanged
.Androidのデフォルト「dropMyActivity&createANewActivity」とは対照的に、. "
解決策: 以前は、回転時にレイアウトを更新できると思っていましたが、現在のコンテキストでレイアウトを再作成する必要があるようです (向きの変更後)。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.category_flipper);
ViewFlipper oldFlipper = viewFlipper;
viewFlipper = (ViewFlipper)findViewById(R.id.categoryFlipper);
for (int i = 0; i < 3; i++) {
final CardLayout cl = new CardLayout(this, cardData[i]);
viewFlipper.addView(cl);
}
cardData[viewIndex].restorePlayer();
viewFlipper.setDisplayedChild(viewIndex);
oldFlipper.removeAllViews();
}