在Android中的方向更改时,视图布局不会刷新

时间:2011-04-15 04:09:52

标签: android view rotation orientation onconfigurationchanged

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

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

我有res/layout-landres/layout-port

我的onConfigurationChanged中有Activity(轮换时会被调用)。

在我的Activity我有一个ViewFlipper,在其中我有LinearLayouts

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

但是当我已经在Activity并且我旋转手机时,我的视图布局不会改变。旋转屏幕,并且未调用活动的onCreate,因为它应该是,onConfigurationChanged中调用了Activity,但屏幕始终使用{重新绘制在LinearLayout开始时加载的{1}}。

我有一种感觉,我错过了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());但是在旋转后使所有内容变黑。我想我必须调用initLayout,但这会重新计算所有内容(而这正是我不想做的事情,这就是我试图用onConfigurationChanged()做的原因,而不是android默认“dropMyActivity& createANewActivity”

解: 以前我以为我可以触发布局在旋转时刷新,但似乎我必须使用当前上下文重新创建布局(在方向更改后)

onConfigurationChanged

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:0)

把它放在你的Android清单中。机器人:configChanges = “取向”

在这种情况下,试试这个并设置你的布局......

    if (Intraday.this.getResources (). getConfiguration (). orientation == Configuration.ORIENTATION_PORTRAIT){ 


    }
    else if (Intraday.this.getResources (). getConfiguration (). orientation == Configuration.ORIENTATION_LANDSCAPE) {      


    }