以编程方式更改android布局

时间:2010-12-15 15:30:26

标签: android layout

我使用这样的布局main.xml启动我的应用程序:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/relative" xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
    <ImageButton android:id="@+id/applogo" ... android:src="@drawable/app_logo"/>
    <TabHost android:id="@android:id/tabhost" ... android:layout_below="@+id/applogo">
        <LinearLayout ...>
            <TabWidget.../>
            <FrameLayout android:id="@android:id/tabcontent"...>
            </FrameLayout>
        </LinearLayout>
    </TabHost>
</RelativeLayout>

设置菜单中的用户可以选择另一个较小的布局(tiny.xml),其布局如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/relative" xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
    <TabHost android:id="@android:id/tabhost" ...>
        <LinearLayout ...>
            <TabWidget.../>
            <FrameLayout android:id="@android:id/tabcontent"...>
            </FrameLayout>
        </LinearLayout>
    </TabHost>
</RelativeLayout>

mainActivity扩展TabActivityonCreate方法:

...

if (isTiny())
setContentView(R.layout.tiny);
else
setContentView(R.layout.main);
mTabHost = getTabHost();

TabSpec newsTab = mTabHost.newTabSpec(NewsActivity.static_getTabActivityTag());
newsIntent = new Intent(this, NewsActivity.class);      
newsTab.setContent(newsIntent);
TextView textView = new TextView(this);

textView.setText(getResources().getString(NewsActivity.static_getIndicatorStringID());
textView.setTextSize(size);
textView.setTextColor(color);
textView.setBackgroundDrawable(background);
tab.setIndicator(textView);
mTabHost.addTab(newsTab);

想法是在mainActivity#onRestart中编写一些代码,这样如果用户通过设置面板更改了布局,则为他加载新的布局。怎么实现呢?我尝试使用setContentView ,但它只是崩溃并再次为标签创建视图,但它只是不起作用,视图是空白的。

更新:添加了如何在活动中创建标签。

更新可以多次执行setContentView。我的问题与意图中的活动有关。

2 个答案:

答案 0 :(得分:3)

您可以随时调用setContentView,而不必在onCreate中。我会使用SharedPreferences来存储用户想要的内容视图。希望这会有所帮助。

答案 1 :(得分:0)

对于片段布局,我这样做:

cat

这样你就知道了。