Gav*_*iel 9 android view rotation orientation onconfigurationchanged
我希望我的VIEW布局可以根据方向变化进行调整.
我的清单设置为:android:configChanges="keyboardHidden|orientation"在活动上.
我有res/layout-land,res/layout-port.
我有onConfigurationChanged我的Activity(它被称为轮换).
在我,Activity我有一个ViewFlipper内部,我有LinearLayouts.
当我启动Activityin port或land模式时,View的布局是正确的(根据我的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);
}
Run Code Online (Sandbox Code Playgroud)
我尝试添加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();
}
Run Code Online (Sandbox Code Playgroud)
如果flipper是对最初安装的视图的引用,那就是导致问题的原因.您需要传递所需布局的资源ID,而不是手机旋转前的旧视图.然后,内容视图将绑定到新资源.也许是这样的(以我的资源标识符为模数):
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.flipper);
flipper = (ViewFlipper) findViewById(R.id.flipper);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14169 次 |
| 最近记录: |