如何在运行时更改布局?
Posted
技术标签:
【中文标题】如何在运行时更改布局?【英文标题】:how to change layout at runtime? 【发布时间】:2013-03-27 13:50:17 【问题描述】:我有一个线性布局,将一个按钮、一个网格视图和一个文本视图设置在一个 xml 文件中。当屏幕处于纵向时,所有这些元素都可以正常显示。但是,当我将屏幕方向更改为横向时,textview 会消失。我想更改配置更改的布局。我想以某种方式水平显示元素,使它们中的每一个都占据屏幕的一定百分比。我还必须更改网格视图中每行显示的项目数,也许还有其他一些参数。到现在为止我有这个,但我不知道如何更改其余参数。
@Override
public void onConfigurationChanged(Configuration newConfig)
super.onConfigurationChanged(newConfig);
LinearLayout linearlayout= (LinearLayout) findViewById(R.id.LinearLayout02);
GridView gridview=(GridView) findViewById(R.id.gridview);
if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
linearlayout.setOrientation(LinearLayout.HORIZONTAL);
else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
linearlayout.setOrientation(LinearLayout.VERTICAL);
【问题讨论】:
需要更改哪些参数? 我还不确定,我可能不得不使用相对布局而不是线性布局...关键是我需要左侧的 gridview 和右侧的 textview。该按钮将位于右上角。 【参考方案1】:您需要在 /res/ 目录中创建一个名为 layout-land
的文件夹,然后在该文件夹中创建一个与其他布局同名的新布局 xml 并放置项目(TextView 等.) 当设备处于横向状态时您希望它们在哪里,android 会从那里处理其余的事情。
编辑:使用以下代码:
@Override
public void onConfigurationChanged(Configuration newConfig)
super.onConfigurationChanged(newConfig);
setContentView(R.layout.my_main_layout);
//save your text from textviews, edittexts, etc. in temp variables
InitializeUI(); //take your findViewById stuff out of onCreate and put it in its own method that can be called here as well.
//set you textviews, etc back to previous values from temp vars
应该可以的。
【讨论】:
问题是我不希望在配置更改时重新创建我的活动,所以我修改了 AndroidManifest.xml 以避免这种情况。而且由于我的活动没有在配置更改时重新创建,因此将 xml 放在 layout-land 文件夹中对我不起作用。 好的,所以你的清单中有`android:configChanges="keyboardHidden|orientation|screenSize"`?无论如何创建我提到的文件夹和文件,我将用如何处理onConfigurationChanged
来更新我的答案。
是的,我的清单中有这个。好的,我已经更改了它,但该应用程序没有在布局域中应用视图。而且我不想在运行时重置新布局,因为我会丢失视图的当前状态......我只想将元素放在其他地方
不想丢失什么样的状态信息?此方法不会像正常旋转那样调用 onDestroy/onCreate,因此您最终丢失的只是可以存储在临时变量中的布局信息。这应该应用横向文件夹中的布局。您是否更改了布局 xml 的名称和/或您是否根据需要重新定位 xml 中的项目?
InitializeUI() 应该做什么? gridview = (GridView) findViewById(R.id.gridview);
例如?以上是关于如何在运行时更改布局?的主要内容,如果未能解决你的问题,请参考以下文章