Я запускаю свое приложение с макетом 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
расширяет TabActivity
и в методе onCreate
:
...
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
, но он просто вылетает и снова создает представления для вкладок, но он просто не работает, представления пустые.
Обновлено: добавлено, как создать вкладкув Activity.
Обновление Можно сделать несколько раз setContentView.Моя проблема была связана с действиями в Намерении.