Это может показаться широким ответом, но я верю, что это многое прояснит для людей, которые часами искали его (я один из них).
Короткий ответ: да, вы можете использовать ссылки в пользовательском XML, не только для строк, но и для примера, который я использую, для простоты понимания.
Учитывая контекст:
- Рез / значения / strings.xml
(Строки по умолчанию, обычно для удобства en-US, но это зависит от разработчика)
<resources>
<string name="sample_string">This is a sample string.</string>
</resources>
- Рез / значение-пт / strings.xml
(локализованные французские струны)
<resources>
<string name="sample_string">Ceci est un exemple de chaîne</string>
</resources>
- Рез / XML / test.xml
(пользовательский XML-файл)
<!-- @string/sample_string identifies both
the default and french localized strings,
the system settings determine which is used at runtime.
-->
<test>
<sample name="sampleName" text="@string/sample_string"/>
</test>
- SRC / COM / пример / приложение / TestXmlParser.java
//Omitted imports for clarity.
public class testXmlParser {
public static final String ns = null;
public int parse(XmlResourceParser parser) throws XmlPullParserException,
IOException{
while(parser.next() != XmlPullParser.END_DOCUMENT){
if(parser.getEventType() == XmlPullParser.START_TAG){
if(parser.getName().equalsIgnoreCase("sample")){
// This is what matters, we're getting a
// resource identifier and returning it.
return parser.getAttributeResourceValue(ns, "text", -1);
}
}
}
return -1;
}
Используйте String getText(int id)
, чтобы получить строку, соответствующую id
(локализовано, если доступно).
Используя приведенный выше пример, мы заменим:
//Return the resource id
return parser.getAttributeResourceValue(ns, "text", -1);
с:
//Return the localized string corresponding to the id.
int id = parser.getAttributeResourceValue(ns, "text", -1);
return getString(id);