Je souhaite remplacer un fichier de mise en page à partir d'un espace de noms Android, par exemple. R.layout.popup_menu_item_layout
(qui est référencé à partir du code as com.Android.internal.R.layout.popup_menu_item_layout
). En déclarant override, je suppose en déclarant un fichier xml
dans le projet qui serait priorisé par rapport à la présentation que l'infrastructure possède.
Notez qu'il ne s'agit que d'un exemple de présentation. La question concerne donc chaque présentation présente dans le répertoire sdk/platforms/Android-XX/data/res/layout
.
tools: override
Il existe une balise undocumentedtools:override
disponible, qui remplace des ressources spécifiques. Voir this answer pour un exemple, qui remplace les valeurs de Design Support Library , not du cadre Android.
L'application de tools:override="true"
à la balise racine de la présentation ne prendra pas effet.
Références de mise en page XML - refs.xml
Comme décrit dans this post, déclarer un fichier refs.xml
dans le répertoire /values/
avec le contenu suivant:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="layout" name="activity_main">@layout/activity_second</item>
</resources>
fera référence à activity_second.xml
une fois que activity_main.xml
est utilisé. Il y a une réponse qui suggère d’utiliser cette technique pour substituer la disposition de Snackbar
.
Cela aussi ne prendra pas effet.
Existe-t-il un moyen légitime de remplacer/substituer un fichier de mise en page à partir du package Android?
Je sais que c’est une vieille question, mais je voulais aussi remplacer une disposition de bibliothèque par la mienne. Voici comment je l’ai faite.
La mise en page en question s'appelait design_bottom_navigation_item
Dans refs.xml, j'ai ajouté ce qui suit:
<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>
Je vais expliquer cela en 4 parties.
Vous pouvez le faire avec n'importe quel type de ressource de cette façon.
Qu'est-ce que vous essayez de faire?
Si vous ne souhaitez que remplacer l'aspect de l'élément de menu, essayez les solutions suivantes:
MyMenuAdapter extends MenuAdapter
personnaliségetView
pour renvoyer la vue depuis votre adaptateur.Ce n'est pas comme ça que ça fonctionne.
Si vous utilisez un SDK sur votre projet (quelle que soit la technologie) et que vous deviez modifier certains comportements, vous allez ajuster ce SDK, puis compiler votre projet avec cette nouvelle version personnalisée.
Essayer de le modifier au moment de l'exécution n'est pas une bonne idée.
Vous devrez faire face à plusieurs problèmes (rétro-compatibilité, déclencheur de sécurité, AIGUS incompatibilité, problème de dépendance, etc.)
Bien entendu, aucune de ces solutions ne s'applique à une application publique.