基于动态指定的XML渲染Android UI

时间:2013-08-19 04:32:50

标签: android user-interface

假设我有一个应用程序,它以Web服务的字符串形式接收Android UI布局XML。比方说,我收到了以下XML字符串......

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <EditText android:id="@+id/edit_message"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:hint="@string/edit_message" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_send" />
</LinearLayout>

无论如何,我可以将此字符串作为布局传递给活动并将其渲染吗?

2 个答案:

答案 0 :(得分:1)

我认为你可以根据你的String内容创建一个XmlPullParser。然后使用LayoutInflatoer中的方法:

inflate(XmlPullParser parser, ViewGroup root)

请参阅链接http://developer.android.com/reference/android/view/LayoutInflater.html

这样的事情:

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput( new StringReader ( "YOUR XML CONTENT" ) );
View rootView = inflate(xpp, null));
setContentView(rootView);

答案 1 :(得分:0)

从类概述here可以看出,此时Android中无法通过非预编译的xml进行布局膨胀。我引用:

&#34;出于性能原因,视图通胀在很大程度上依赖于在构建时完成的XML文件的预处理。因此,目前无法在运行时对普通XML文件使用带有XmlPullParser的LayoutInflater;它只适用于从编译资源(R.something文件)返回的XmlPullParser。&#34;