Вопрос по string, android, xml – Объединить несколько строк в XML?

36

Я прохожу этоКак объединить несколько строк в Android XML? и в конце есть комментарии, которые

For clarity, Its works:

<string name="title">@string/app_name</string>. & # X2013;Andrzej Duś

Я сделал свой собственный пример, но он не работает. Так жеAndrzej неправильно или я делаю что-то не так в моем коде.

R.strings.bbb должен содержать"bbb aaa" но вместо"bbb aaa" это содержит"bbb @strings/aaa"

<code><string name="aaa">aaa</string>
<string name="bbb">bbb @strings/aaa</string>
</code>

Query:

Можно ли сделать некоторую конкатенацию только в xml, без изменений исходного кода?

Причина, по которой я не хочу редактировать код, потому что я использую эти строки вxml/preferences.xml

For Example:

<ListPreference android:key="key_bbb" android:title="@string/bbb" ....

Если вы понимаете, что я имею в виду, здесь нет возможности использовать что-то подобное

<code>String title = res.getString(R.string.title, appName);
</code>
пожалуйста, посмотрите мои изменения Lukap
кажется нетstackoverflow.com/questions/8203540/… Blackbelt
Не афаик - есть только поддержка "единственной ссылки" - он не объединяет две или более ссылок (или текста) в одну строку, например,<string name="bbb">@strings/aaa</string> должен работать тогда как<string name="bbb">test @strings/aaa</string> интерпретируется как необработанная строка (так как она не начинается со ссылки) - и<string name="bbb">@strings/aaa @strings/aaa</string> потерпит неудачу, потому что этоwould быть разобранным какsingle ссылка. Ответ на его вопрос был, однако, сделать это в коде - и это работает. Jens

Ваш Ответ

7   ответов
9

<string name="aaa">aaa</string>
<string name="bbb">bbb @string/aaa</string>

Output - bbb @string/aaa

Если вы делаете,

<string name="aaa">aaa</string>
<string name="bbb">@string/aaa bbb</string>  -> This won't work it
                                                      will give compilation error

Потому что здесь он будет искать строку со ссылкой@string/aaa bbb который не существует.

Проблема в вашем случае была, вы где используете@strings/aaa который должен быть@string/aaa

См. Ответ Савелия Загурского о способе многократного использования строки в XML-файле.
1

строки в 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>

а затем в коде:

val killBillV1 = getString(R.string.list).format(
    Locale.US,
    getString(R.string.school_girl),
    getString(R.string.assistant),
    getString(R.string.boss)
)
0

Использовать массив

<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>

А затем сделать метод в классе Java, как показано ниже

public String getStringArray(int resStringArray)
{
    String str = "";

    String[] strArray = mContext.getResources().getStringArray(resStringArray);
    for (String s: strArray)
    {
        str += s;
    }

    return str;
}

Теперь вызывайте его из любого Java-класса как

mDialog.setMessage(getStringArray(R.array.update_dialog_msg);
// OR
textView.setText(getStringArray(R.array.update_dialog_msg);
49

вы не можете объединять строки в XML, но вы можете определять ресурсы 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>

Оригинальный ответ был опубликованВот.

-3

<html>
      <body>
        <ul>
          <xsl:for-each select="stock">
            <xsl:if test="starts-with(@symbol, 'C')">
              <li>
                <xsl:value-of select="concat(@symbol,' - ', name)" />
              </li>
            </xsl:if>
          </xsl:for-each>
        </ul>
      </body>
    </html>

http://www.java2s.com/Tutorial/XML/0100__XSLT-stylesheet/concatfunction.htm

18

но с помощью кода Java вы можете использоватьString.format() метод.

<string name="aaa">aaa</string>
<string name="bbb">bbb %1$s</string>

В коде Java

String format = res.getString(R.string.bbb);
String title = String.format(format, res.getString(R.string.aaa));

Таким образом, заголовок будет полной строкой после объединения двух строк.

Интересно, что является стандартной практикой добавления имен приложений в внешние строки в приложении. Это очень близко, хотя. :)
что вы предлагаете с моей проблемой с настройками XML? Lukap
Я знаю, что ответ не связан с настройками XML. Только xml не может обработать конкат двух строк, это даст вам ошибку компиляции, как сказал @MeAndWe. Я дал вам идею объединить две строки, используяString.format()
6

    resValue "string", "TWITTER_CALLBACK", "twitter_callback_" + applicationId

Похожие вопросы