Android 改变活动';在运行时通过主内存中包含的XML字符串创建布局

Android 改变活动';在运行时通过主内存中包含的XML字符串创建布局,android,android-layout,Android,Android Layout,我有一个正在向用户显示的活动。在活动中,我有一个按钮。每次用户按下按钮时,应用程序都会从远程服务器加载一个xml文件。xml文件实际上是为应用程序设计的布局。在加载新的xml文件并将其存储在newLayout变量中之后,我想将xml文件设置为替换显示给用户的当前布局 String newLayoutStr = ""; onClickButton() { newLayoutStr = loadNewLayoutFromRemoteServer(); } // set the layout

我有一个正在向用户显示的活动。在活动中,我有一个按钮。每次用户按下按钮时,应用程序都会从远程服务器加载一个xml文件。xml文件实际上是为应用程序设计的布局。在加载新的xml文件并将其存储在newLayout变量中之后,我想将xml文件设置为替换显示给用户的当前布局

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"
        }
    ]
}