9
votes

Android: Comment injecter un élément dans un autre élément dans XML?

J'aimerais savoir s'il existe un moyen d'insérer / injecter un élément défini dans un fichier XML dans un autre élément, ce faisant. Juste avec XML.

Par exemple, j'aurais pu avoir: xxx

et je cherche quelque chose comme: xxx

de sorte que getstring (r.string.about_application) entraînerait "Auteur: Francesco".

Je sais que je pouvais combiner les deux éléments du code Java en utilisant String.format (chaîne, formatargs) comme par exemple: xxx

puis dans le code Utilisez xxx

Mais je voudrais le faire directement dans XML.

Quelqu'un peut-il me suggérer un moyen de le faire?


0 commentaires

4 Réponses :


1
votes

Malheureusement, je ne pense pas que ce soit possible. J'ai demandé à un Question similaire il y a un moment et on dit que ce n'était pas possible.


1 commentaires

Merci quand même! En fait, je pense aussi qu'il n'y a pas de moyen standard de le faire, même si le "Trick" Mads Hansen proposé pourrait faire le travail.



15
votes

Si je comprends ce que vous cherchez à faire, alors entités générales internes (analysées) strong> pourrait vous aider à réaliser ce que vous recherchez.

Un exemple de la manière dont vous pouvez définir la valeur "francesco" comme une entité appelée "auth" puis l'utiliser dans votre XML: P>

<?xml version="1.0"?>
<doc>
  <string name="author">Francesco</string>
  <string name="about_application">Author: Francesco</string>
</doc>


2 commentaires

Merci! Cela fonctionne bien lorsque je réfère une entité interne d'un élément XML dans le même fichier, tandis que j'ai des problèmes pour faire référence à une entité externe définie dans un autre fichier XML. Quoi qu'il en soit, je ne sais pas si ce type de mécanisme doit être utilisé avec des fichiers Android / Res / Values ​​/ XML, je pense que c'est un peu loin de «standard» android de les gérer.


C'est comme une indirection sur l'indirection :-). Le problème peut être que lors de la traduction de la chaîne.xml (copies dans d'autres dossiers), vous oubliez de localiser et d'authentifier ;. En outre, chaque traduction nécessite toujours toutes les balises de chaîne contenant et authentifier; alors. Mais oui, c'est le meilleur possible car il doit être statique (les fichiers XML peuvent donc être rendus binaires).



0
votes

Plugin des grades 0.10 appelle ce qu'ils appellent MANIFESTPELLINGERERS qui fait fondamentalement ce dont vous avez besoin, mais cette fonctionnalité ne fonctionne actuellement que dans l'AndroidManifest. Il y a bien que Un problème ouvert ciblant la prochaine version Android version 1.4 ( 1.3 est actuellement en version bêta4, donc devrait être proche de RC1 et pourrait voir une version 1.4 bêta1, j'espère bientôt) .

Ce problème devrait élargir les espaces réservés dans les fichiers de configurations XML ( je viens de prier cela inclurait le fichier de chaînes et non seulement la configuration XML de base ).

de : http://tools.android.com/tech-docs/new- système de construction

Pour les remplacements d'emplois personnalisés, utilisez le DSL suivant pour Configurez les valeurs des espaces réservées: xxx

substituera l'espace réservé dans la déclaration suivante:

Android: étiquette = "$ {ActivityLabel}">

a hâte d'essayer de l'essayer dehors. De cette façon, vous pouvez mettre un espace réservé dans plusieurs événements dans le fichier Strings et définir la valeur uniquement à un endroit au lieu de modifier tous les fichiers Java pour ajouter un argument avec% 1 $ S

pour la seule solution propre est bien que le tour de l'entité, mais cela ne fonctionnera pas si vous souhaitez remplacer la valeur en arômes car l'entité doit être définie dans le même fichier XML.


0 commentaires

0
votes

Oui, il est possible, j'ai créé cette petite bibliothèque qui vous permet de résoudre ces espaces réservés à Buildtime. Vous n'aurez donc pas à ajouter de code Java / Kotlin pour le faire fonctionner.

Basé sur votre exemple , vous devez configurer votre chaîne comme ceci: xxx

puis le plug-in veillera à créer les éléments suivants: xxx

Plus d'infos Ici: https://github.com/likethesalad/android-string -Refièrent


0 commentaires