9

我希望在方向更改时调整我的 VIEW 布局。

我的清单设置为:android:configChanges="keyboardHidden|orientation"在活动上。

我有res/layout-landres/layout-port

我有onConfigurationChangedActivity它被称为轮换)。

在我的里面Activity我有一个ViewFlipper,在里面我有LinearLayouts

当我启动Activity港口或陆地模式时,视图的布局是正确的(根据我的res/layout-????文件)。

但是当我已经在Activity并且我旋转手机时,我的视图布局不会改变。屏幕被旋转,并且onCreateActivity 没有被调用,因为它应该是,在onConfigurationChanged中被调用Activity,但是屏幕总是用启动LinearLayout时加载的重新绘制Activity

我有一种感觉,我错过了一些东西onConfigurationChanged,但不知道是什么。我想我需要在里面ViewFlipperLinearLayout里面调用一些函数。我应该调用什么函数?

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 回答