【发布时间】:2011-04-15 04:09:51
【问题描述】:
我希望在方向更改时调整我的 VIEW 布局。
我的清单设置为:android:configChanges="keyboardHidden|orientation" 在活动中。
我有res/layout-land、res/layout-port。
我的Activity 中有onConfigurationChanged(它在轮换时被调用)。
在我的Activity 中有一个ViewFlipper,在里面我有LinearLayouts。
当我在端口或陆地模式下启动Activity 时,视图的布局是正确的(根据
到我的res/layout-???? 文件)。
但是当我已经在Activity 中并旋转手机时,我的视图布局不会改变。屏幕被旋转,并且活动的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();
}
【问题讨论】:
标签: android view rotation orientation onconfigurationchanged