Je passe par ceci Comment concaténer plusieurs chaînes dans Android XML? et à la fin il y a des commentaires qui
For clarity, Its works:
<string name="title">@string/app_name</string>.
- Andrzej Duś
J'ai fait mon propre exemple mais ça ne marche pas. _ (Andrzej} _ ne fonctionne pas correctement ou je fais quelque chose de mal dans mon code.
R.strings.bbb
devrait contenir "bbb aaa"
mais au lieu de "bbb aaa"
il contient "bbb @strings/aaa"
<string name="aaa">aaa</string>
<string name="bbb">bbb @strings/aaa</string>
Requête:
Est-il possible de faire de la concaténation uniquement en XML, sans modification du code source?
Raison pour laquelle je ne veux pas éditer dans le code parce que j'utilise ces chaînes dans xml/preferences.xml
Par exemple:
<ListPreference Android:key="key_bbb" Android:title="@string/bbb"
....
Si vous savez ce que je veux dire, ici il n'y a aucune possibilité d'utiliser quelque chose comme ça
String title = res.getString(R.string.title, appName);
Non, je ne pense pas que vous puissiez concaténer.
<string name="aaa">aaa</string>
<string name="bbb">bbb @string/aaa</string>
Sortie - bbb @ string/aaa
Si tu fais,
<string name="aaa">aaa</string>
<string name="bbb">@string/aaa bbb</string> -> This won't work it
will give compilation error
Parce qu'ici, il va chercher une chaîne avec la référence @string/aaa bbb
qui n'existe pas.
Le problème dans votre cas était, vous utilisiez @strings/aaa
qui devrait être @string/aaa
Non, vous ne pouvez pas concaténer des chaînes en XML, mais vous pouvez définir des ressources XML.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY appname "MyAppName">
<!ENTITY author "MrGreen">
]>
<resources>
<string name="app_name">&appname;</string>
<string name="description">The &appname; app was created by &author;</string>
</resources>
La réponse originale a été postée ici .
En XML uniquement, cela n’est pas possible, mais vous pouvez utiliser la méthode String.format()
en utilisant le code Java.
<string name="aaa">aaa</string>
<string name="bbb">bbb %1$s</string>
En code Java
String format = res.getString(R.string.bbb);
String title = String.format(format, res.getString(R.string.aaa));
Donc title sera une chaîne complète après la concaténation de deux chaînes.
Vous pouvez concaténer les ressources dans gradle.build:
resValue "string", "Twitter_CALLBACK", "Twitter_callback_" + applicationId
Version Kotlin:
chaînes dans le xml:
<string name="school_girl">Gogo Yubari</string>
<string name="assistant">Sofie Fatale</string>
<string name="boss">O-Ren Ishii</string>
<string name="list">%s, %s, %s</string>
et ensuite dans le code:
val killBillV1 = getString(R.string.list).format(
Locale.US,
getString(R.string.school_girl),
getString(R.string.assistant),
getString(R.string.boss)
)
Que diriez-vous de cette technique
Utilisez un tableau
<string name="app_link">https://myapp.com/</string>
<array name="update_dialog_msg">
<item>Update can be downloaded manually by visiting this link:\n</item>
<item>@string/app_link</item>
</array>
Et puis faire une méthode en classe Java comme ci-dessous
public String getStringArray(int resStringArray)
{
String str = "";
String[] strArray = mContext.getResources().getStringArray(resStringArray);
for (String s: strArray)
{
str += s;
}
return str;
}
Maintenant, appelez-le depuis n'importe quelle classe Java
mDialog.setMessage(getStringArray(R.array.update_dialog_msg);
// OR
textView.setText(getStringArray(R.array.update_dialog_msg);