Cargar recursos (diseño) desde otro apk dinámicamente

Me las arreglé para tirar de los diseños, y lo agrego a mi viewflipper, sin embargo, allí se carga como en blanco.

El código es,

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; } } 

No tengo errores, y depurado y revisado. Los ID de diseño son correctos. Sin embargo, en mi viewFlipper su justo en blanco. No hay advertencias ni errores que pueda encontrar.

3 Solutions collect form web for “Cargar recursos (diseño) desde otro apk dinámicamente”

Finalmente lo conseguí … ¡Es realmente simple !!!!

Aquí es lo que hice …

  1. En el apk de destino, sólo hay recursos y diseños sin código de aplicación o de actividad. Creé una clase,

     public final class ViewExtractor { private static final int NUMBER_OF_LAYOUTS = 5; public static View[] getAllViews(Context context) { View[] result = new View[ViewExtractor.NUMBER_OF_LAYOUTS]; result[0] = View.inflate(context, R.layout.layout_0, null); result[1] = View.inflate(context, R.layout.layout_1, null); result[2] = View.inflate(context, R.layout.layout_2, null); result[3] = View.inflate(context, R.layout.layout_3, null); result[4] = View.inflate(context, R.layout.layout_4, null); return result; } } 

Luego, en mi aplicación actual, modifiqué mi código anterior. La modificación tiene lugar una vez que se ha comprobado que existe el paquete.

  // If the package exists then get the resources within it. // Use the method in the class to get the views. Class<?> viewExtractor; try { viewExtractor = packageContext.getClassLoader().loadClass(packageName + ".ViewExtractor"); } catch (ClassNotFoundException excep) { continue; } View[] resultViews; try { Method m = viewExtractor.getDeclaredMethod("getAllViews", Context.class); resultViews= (View[])m.invoke(null, new Object[]{packageContext}); for( View v : resultViews) { this.viewFlipper.addView(v); } } catch (Exception excep) { excep.printStackTrace(); } 

No está inflando un diseño. Estás creando una View vacía y agregándola a tu ViewFlipper .

Actualmente estoy haciendo esto. Sólo funciona si se conoce el paquete Nombre de actividad o fragmento de la .apk que debe proporcionar la jerarquía de diseño (llamo a este contexto externo). Y usted necesita saber el nombre del diseño que desea inflar (por ejemplo, R.layout.mylayout -> "mylayout")

 Context c = createPackageContext(foreignPackageName, Context.CONTEXT_INCLUDE_CODE|Context.CONTEXT_IGNORE_SECURITY); //create foreign context int resId = c.getResources.getIdentifier(mylayoutName,"layout",foreignPackageName); LayoutInflater myInflater = LayoutInflater.from(c); //Inflater for foreign context View myLayout = myInflater.inflate(resId,null,false); //do not attach to a root view 
  • Cómo realizar 3D Curve Wall con jQuery o js
  • Creación de estilos-v21.xml
  • Internacionalización "social" en la aplicación de Android: carga dinámica de recursos
  • Lista de palabras reservadas en Android
  • Android: uso de recursos de otro proyecto en mi área de trabajo
  • Obtención dinámica de los idiomas disponibles de la aplicación
  • ¿Cómo agregar el Recurso de Biblioteca al Proyecto Cordova?
  • ¿No puede anular el recurso xml de la biblioteca con el recurso png en la aplicación?
  • Formato y estilo de un recurso xml + asignar a textview
  • No se encuentran recursos de Android en algunos dispositivos
  • WebView, agrega el archivo .CSS local a una página HTML?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.