知识的价值不在于占有,而在于使用。这篇文章主要讲述以编程方式更改android布局相关的知识,希望能为你提供帮助。
我用这样的布局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="https://www.songbingjia.com/android/@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。我的问题与意图中的活动有关。
答案您可以随时调用setContentView,而不必在onCreate中。我会用a
SharedPreferences
来存储用户想要的内容视图。希望这可以帮助。另一答案对于片段布局,我这样做:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (MainActivity.isDarkMode) {
return inflater.inflate(R.layout.layout_dark, container, false);
} else {
return inflater.inflate(R.layout.layout_light, container, false);
}
}
【以编程方式更改android布局】所以你明白了。
推荐阅读
- 布局问题Android Studio [关闭]
- Android Set视图在包含视图的左侧20像素,因此其部分覆盖
- 在屏幕底部的背景图象在振翼app
- 在使用Android O的“android(fontFamily”时获取错误“文件名必须以.xml结尾”())
- Appcelerator(标签布局复合在View布局垂直中)
- Admob违规消息Android应用程序
- Android InflateException二进制XML文件行#2
- Android webview示例不起作用(R.layout.show_web_view);
- 适用于不同屏幕尺寸的Android布局