9

向きの変更時に VIEW レイアウトを調整したいと思います。

私のマニフェストは次のように設定されてandroid:configChanges="keyboardHidden|orientation"います。

私はres/layout-land、を持っていres/layout-portます。

私は持っonConfigurationChangedていますActivity(ローテーションで呼び出されます)。

私のActivity中には があり、ViewFlipperその中には がありLinearLayoutsます。

Activityポートモードまたはランドモードで開始すると、ビューのレイアウトは正しいです(私のres/layout-????ファイルによると)。

しかし、すでに にいActivityて電話を回転させても、View レイアウトは変更されません。画面が回転し、onCreateアクティビティの が呼び出されず、本来onConfigurationChangedは で呼び出されますが、起動時に読み込まれた でActivity常に画面が再描画されます。LinearLayoutActivity

で何かを見逃しているような気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();
}
4

2 に答える 2

9

最初にインストールされたビューへの参照である場合flipper、それが問題の原因です。電話が回転する前の古いビューではなく、必要なレイアウトのリソース ID を渡す必要があります。その後、コンテンツ ビューが新しいリソースにバインドされます。たぶん次のようなものです(あなたのリソース識別子でのモジュロ私の推測):

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.flipper);
    flipper = (ViewFlipper) findViewById(R.id.flipper);
}
于 2011-04-15T04:22:23.337 に答える
0

それをあなたのAndroidマニフェストに入れてください。Android:configChanges="向き"

その場合は、これを試してレイアウトを設定してください...

    if (Intraday.this.getResources (). getConfiguration (). orientation == Configuration.ORIENTATION_PORTRAIT){ 


    }
    else if (Intraday.this.getResources (). getConfiguration (). orientation == Configuration.ORIENTATION_LANDSCAPE) {      


    }
于 2011-04-15T04:16:05.400 に答える