Могу ли я использовать строковый ресурс в строковом ресурсе в string.xml? - PullRequest
2 голосов
/ 30 августа 2011

Как видно из названия, моя проблема в том, что я не знаю, если / как я могу использовать строковый ресурс в строковом ресурсе в string.xml.

<string name="projectname">Include Test</string>
<string name="about">@string/projectname is to test if you can use a String Resource in a String Resource</string>

Мой вопрос, если кто-нибудь знает, могу ли я написать

<string name="identifier">@string/other_identifier</string>

потому что Eclispe говорит

error: Error: No resource found that matches the given name (at 'other_identifier' with value '@string/other_identifier eingeben...').

Ответы [ 4 ]

2 голосов
/ 30 августа 2011

Вам лучше построить эти String во время выполнения.Объедините различные ресурсы String вместе с помощью String.format.

Дополнительная информация: http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling

2 голосов
/ 30 августа 2011

Нет, я не думаю, что это возможно.

1 голос
/ 16 февраля 2012

Редактировать: На самом деле это решение с использованием пользовательских ENTITY записей гораздо приятнее.


Из коробки должно работать следующее:

<string name="identifier">@string/other_identifier</string>

Я только что попробовал это с API Level 8, и он отлично работает. Смотри также https://stackoverflow.com/a/6378421/786434

Чтобы иметь возможность перекрестной ссылки на строки в других словах, вы можете создать себе небольшой вспомогательный метод:

private static Pattern pattern = Pattern.compile("@string/(\\S+)");

public static String getString(Resources res, int stringID) {
String s = res.getString(stringID);

Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
    try {
    final Field f = R.string.class.getDeclaredField(matcher.group(1));
    final int id = f.getInt(null);
    final String replace = res.getString(id);
    s = s.replaceAll(matcher.group(), replace);

    } catch (SecurityException ignore) {
    } catch (NoSuchFieldException ignore) {
    } catch (IllegalArgumentException ignore) {
    } catch (IllegalAccessException ignore) {
    }
}

return s;
}
0 голосов
/ 05 октября 2016

Хороший способ вставить часто используемую строку (например, имя приложения) в XML без использования кода Java здесь :

<?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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...