我希望在屏幕方向改变时调整我的VIEW布局。
我的清单文件中设置了:android:configChanges="keyboardHidden|orientation"
。
我有res/layout-land
和res/layout-port
。
在我的Activity
中,我有一个ViewFlipper
并且里面有LinearLayouts
。
当我在横向或纵向模式下启动Activity
时,视图的布局是正确的(根据我的res/layout-????
文件)。
但是,当我已经在Activity
中,并旋转手机时,我的视图布局没有改变。屏幕被旋转,Activity
的onCreate
没有被调用,而是应该被调用的onConfigurationChanged
被调用了,但屏幕总是用加载Activity
时的LinearLayout
重新绘制。
我觉得我在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);
}
我尝试在
onConfigurationChanged()
中添加flipper = new ViewFlipper(getApplicationContext());
,但旋转后一切都变黑了。我想我必须调用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();
}