gpt4 book ai didi

android - View 布局不会在 android 中的方向更改时刷新

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:35:19 32 4
gpt4 key购买 nike

我希望我的 VIEW 布局能够根据方向变化进行调整。

我的 list 在 Activity 中设置为:android:configChanges="keyboardHidden|orientation"

我有res/layout-land, res/layout-port

我的 Activity 中有 onConfigurationChanged(轮流调用)。

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

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

但是当我已经在 Activity 中并且旋转手机时,我的 View 布局没有改变。屏幕旋转了,没有调用activity的onCreate,应该是,在Activity中调用了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);
}

我尝试将 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();
}

最佳答案

如果 flipper 是对最初安装的 View 的引用,这就是导致问题的原因。您需要传递所需布局的资源 ID,而不是手机旋转之前的旧 View 。然后内容 View 将绑定(bind)到新资源。也许是这样的(模数我对您的资源标识符的猜测):

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.flipper);
flipper = (ViewFlipper) findViewById(R.id.flipper);
}

关于android - View 布局不会在 android 中的方向更改时刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5672299/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com