4

String Fromat を使用した Layout.xml を含む String Input があります。

 // String that contains the Layout.xml :

 String concat ;

 // Create the XmlPullParser from the String format

 XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

 factory.setNamespaceAware(true);

 XmlPullParser xpp = factory.newPullParser();
 xpp.setInput( new StringReader (concat) ); 

 // create le The LayoutInflater 

 LayoutInflater inflater =         (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

 View myView = inflater.inflate(xpp, null);

私はこのバグを持っています:

03-12 08:23:12.876: W/System.err(937): android.view.InflateException: START_TAG http://schemas.android.com/apk/res/android}android:orientation='vertical' { http ://schemas.android.com/apk/res/android }android:layout_width='fill_parent' { http://schemas.android.com/apk/res/android }android:layout_height='fill_parent'>@1: 226 in java.io.StringReader@44f50508: クラスの拡張中にエラーが発生しました

助けてください ?

4

1 に答える 1

3

Inflater は XmlBlock しか受け付けないようです。

私はこれを行う方法を書きました。プロジェクト サイトを参照でき ます。 #L202

主なコードは次のとおりです。

// byte[] data = ... 
// bytes of compiled xml (unzip the apk, get the bytes from res/layout*/*.xml)

// XmlBlock block = new XmlBlock(data);
Class<?> clazz = Class.forName("android.content.res.XmlBlock");
Constructor<?> constructor = clazz.getDeclaredConstructor(byte[].class);
constructor.setAccessible(true);
Object block = constructor.newInstance(data);

// XmlPullParser parser = block.newParser();
Method method = clazz.getDeclaredMethod("newParser");
method.setAccessible(true);
XmlPullParser parser = method.invoke(block);
于 2014-02-09T10:16:16.357 に答える