2012-03-12 4 views
3

У меня есть строковый ввод, содержащий Layout.xml со String Fromat.Как создать LayoutInflater Для XmlPullParser в качестве входных данных?

// 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} андроид: layout_width = 'fill_parent' {http://schemas.android.com/apk/res/android} Android: layout_height = 'fill_parent'> @ 1: 226 в Java. [email protected]: ошибка раздувания класса

Помогите, пожалуйста?

ответ

3

Кажется, что Inflater принимает только XmlBlock.

Я написал метод, чтобы сделать это, вы можете Referer на сайте проекта: https://github.com/liudongmiao/preference-fragment-compat/blob/master/src/me/piebridge/android/preference/PreferenceFragment.java#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); 

 Смежные вопросы

  • Нет связанных вопросов^_^