Android 改变活动';在运行时通过主内存中包含的XML字符串创建布局
我有一个正在向用户显示的活动。在活动中,我有一个按钮。每次用户按下按钮时,应用程序都会从远程服务器加载一个xml文件。xml文件实际上是为应用程序设计的布局。在加载新的xml文件并将其存储在newLayout变量中之后,我想将xml文件设置为替换显示给用户的当前布局Android 改变活动';在运行时通过主内存中包含的XML字符串创建布局,android,android-layout,Android,Android Layout,我有一个正在向用户显示的活动。在活动中,我有一个按钮。每次用户按下按钮时,应用程序都会从远程服务器加载一个xml文件。xml文件实际上是为应用程序设计的布局。在加载新的xml文件并将其存储在newLayout变量中之后,我想将xml文件设置为替换显示给用户的当前布局 String newLayoutStr = ""; onClickButton() { newLayoutStr = loadNewLayoutFromRemoteServer(); } // set the layout
String newLayoutStr = "";
onClickButton() {
newLayoutStr = loadNewLayoutFromRemoteServer();
}
// set the layout contained in newLayoutStr as new layout of the current activity
有什么意见吗?我不确定这是否可以在运行时从内存中完成。您可以整理XML并将其保存到SD卡,然后使用
从那里,您可以使用
getLayoutInflater()对XML进行充气。充气(YourResourceID,TheRootView)
据我所知,目前无法在运行时动态加载编译时不可用的布局。这是因为LayoutFlater需要一个资源ID(来自R类),这是在编译时确定的。另一种方法是实现一个定制的LayoutInflater(通过借用LayoutInflater类的一些想法),它可以做到这一点,尽管这将非常缓慢,因为在编译时进行了大量优化这将无法满足您的要求。Android依赖于使用自动生成的类调用R的资源标识符。该文件包含应用程序中各种类值的公共静态final int
引用。此处引用的类可在以下位置找到:
此类用于引用应用程序中的各种资源,其中一种是布局
。因此,系统希望xml中定义的所有布局都包含在生成的R
类中
所以用一句话来说:你将无法以你想要的方式完成这件事
我要做的是有一个json响应并将其转换为动态生成的布局
对于XML,请下载test.XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent">
<TextView android:id="@+id/textViewTest"
android:layout_centerInParent="true"
android:gravity="center"
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
</RelativeLayout>
然后,我会将其解析为一个模型对象,并使用该模型对象动态构建布局。为了添加字段,您需要使用xml定义的一些布局,以便能够在应用程序中添加更多字段。“资产目录中的任何内容都在APK中。它不像SD卡那样位于外部存储中”-->我认为这是不可能的,实际上我们一直在考虑这个解决方案。到目前为止,这是最好的解决方案。另一种解决方案是使用web视图:D。谢谢!!!
{
"layout_parent":"RelativeLayout",
"layout_height": "match_parent",
"layout_width": "match_parent",
"layout_children": [
{
"layout_child":"TextView",
"layout_child_id":"textViewTest",
"layout_height":"wrap_content",
"layout_width":"match_parent",
"layout_gravity":"center",
"layout_centerInParent":"true"
}
]
}