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:
- Haz tu propia rom de Android donde aplicarás tu modificación.
- 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.
- Haz tu propio sdk :)
- 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:
- Crear un
MyMenuAdapter extends MenuAdapter
personalizadoMyMenuAdapter extends MenuAdapter
- 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.