studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android xml android-layout android-resources aapt

para - manual de programacion android pdf



Sobrescribir el xml del diseño de Android Framework (3)

Está intentando personalizar su sdk en la propia aplicación, en tiempo de ejecución.

Eso no es así como funciona.

Si usa un SDK en su proyecto (en cualquier tecnología) y necesita modificar algún comportamiento, modificará este SDK y, a continuación, compilará su proyecto con esta nueva versión personalizada.
Tratar de modificarlo en tiempo de ejecución no es una buena idea.
Se enfrentará a varios problemas (compatibilidad TREBLE , activador de seguridad, incompatibilidad de TREBLE , problema de dependencia, etc.)

Tienes 4 posibilidades para hacer lo que quieras:

  1. Haz tu propia rom de Android donde aplicarás tu modificación.
  2. Copie los recursos que necesita modificar en un xmlObject falso con la etiqueta, después del onPostCreate de su aplicación, podrá modificar la inflación de cuándo. Puede generalizar este comportamiento y simulará una superposición de SDK.
  3. Haz tu propio sdk :)
  4. Reflexión multinivel, pero, no hay forma de tener éxito con una versión estable

Por supuesto, ninguna de estas soluciones es aplicable a una aplicación pública.

Problema

Quiero anular un archivo de diseño del espacio de nombres de Android, por ejemplo, R.layout.popup_menu_item_layout (al que se hace referencia desde el código como com.android.internal.R.layout.popup_menu_item_layout ). Al decir anulación , asumo que declaro un archivo xml en el proyecto que se priorizará sobre el diseño que posee el marco.

Tenga en cuenta que esto es solo un ejemplo de diseño, por lo que la pregunta concierne a cada diseño que está presente en el directorio sdk/platforms/android-XX/data/res/layout .

Lo que he intentado

herramientas: anular

Hay tools:override undocumented tools:override etiqueta de tools:override disponible, que anula recursos específicos. Consulte this respuesta para ver un ejemplo, que reemplaza los valores de la Biblioteca de soporte de diseño , no del marco de Android.

La aplicación de tools:override="true" a la etiqueta raíz del diseño no tendrá efecto.

Referencias de diseño XML - refs.xml

Como se describe en this publicación, declare un archivo refs.xml en el directorio /values/ con el siguiente contenido:

<?xml version="1.0" encoding="utf-8"?> <resources> <item type="layout" name="activity_main">@layout/activity_second</item> </resources>

se referirá a activity_second.xml una vez activity_main.xml se use activity_main.xml . Hay una respuesta que sugiere utilizar esta técnica para sustituir el diseño de Snackbar .

Esto tampoco tendrá efecto.

Pregunta

¿Hay alguna forma legítima de anular / sustituir un archivo de diseño del paquete de Android?


¿Qué es lo que estás tratando de hacer?

Si la idea de reemplazar solo la apariencia del elemento de menú, puede intentar lo siguiente:

  1. Crear un MyMenuAdapter extends MenuAdapter personalizado MyMenuAdapter extends MenuAdapter
  2. Reemplace el método getView para devolver la vista desde su adaptador.

Sé que esta es una pregunta antigua, pero también quería anular un diseño de biblioteca con el mío, así es como lo hice.

El diseño en cuestión se llamó design_bottom_navigation_item

En refs.xml he añadido lo siguiente:

<resources xmlns:tools="http://schemas.android.com/tools"> <item name="design_bottom_navigation_item" type="layout" tools:override="true">@layout/bottom_navigation_item</item> </resources>

Hay 4 partes a esto que explicaré.

  • Nombre : este es el nombre del diseño que desea anular
  • Tipo : el tipo de recurso que está tratando de anular, en este caso un diseño.
  • herramientas: anular : así es como le dices a Android Studio que anule el diseño de la biblioteca con el tuyo.
  • Valor : Aquí es donde especifica qué recurso desea utilizar en su lugar.

Puede hacer esto con cualquier tipo de recurso de esta manera.