2012-07-04 2 views
3

Мне интересно, можно ли загрузить файл макета xml из другого apk. Я знаю, как получить доступ к другим ресурсам приложений, но я не уверен, как загрузить xml, если это возможно.Загрузить ресурс (макет) из другого apk

Должен ли я разбирать xml, если бы я хотел установить этот макет в виде представления с использованием развёртывания макета?

Вроде как эти шаги ...

  1. Использование XmlPullParser.setInput для "нагрузить" XML-файл
  2. Преобразование его в AttributeSet
  3. Создать вид из этого AttributeSet
  4. использования setContentView (View) в вашей деятельности

Я думаю, что я спрашиваю, возможно ли это? Как я уже сказал, я знаю, как получить доступ к ресурсам. Но как мне получить доступ к макету xml?

Спасибо!

ответ

3

Мне удалось вытащить макеты, и я добавлю его в свой viewflipper, однако там он загружен как пустой.

Resources packageResources; 
Context packageContext; 
try 
{ 
    packageResources = pm.getResourcesForApplication(packageName); 
    packageContext = this.createPackageContext(packageName, Context.CONTEXT_INCLUDE_CODE + Context.CONTEXT_IGNORE_SECURITY);     
} 
catch(NameNotFoundException excep) 
{ 
    // the package does not exist. move on to see if another exists. 
} 

Class layoutClass; 
try 
{ 
    // using reflection to get the layout class inside the R class of the package 
    layoutClass = packageContext.getClassLoader().loadClass(packageName + ".R$layout"); 
} 
catch (ClassNotFoundException excep1) 
{ 
    // Less chances that class won't be there. 
} 

for(Field layoutID : layoutClass.getFields()) 
{ 
    try 
    { 
     int id = layoutID.getInt(layoutClass); 
     XmlResourceParser xmlResourceLayout = packageResources.getLayout(id); 

     View v = new View(this, Xml.asAttributeSet(xmlResourceLayout)); 

     this.viewFlipper.addView(v);     
    } 
    catch (Exception excep) 
    { 
     continue; 
    } 
} 

У меня нет ошибок, и я отлаживается и проверяется. Идентификаторы макета верны. Однако, на мой взгляд, это просто пустое. Никаких предупреждений или ошибок я не могу найти.

Наконец получил решение ... выложили его ниже,

Load resource (layout) from another apk dynamically

+1

Добро пожаловать в StackOverflow! Если у вас возникли проблемы, скорее создайте свой собственный вопрос и обратитесь к нему по мере необходимости. –