Используйте переменную в качестве строки имени. xml - PullRequest
0 голосов
/ 29 января 2020

У меня есть несколько пакетов со статусом. в строках xml этот статус будет (переведен на норвежский)

 <string name="collectable">Kan hentes</string>
    <string name="underway">Underveis</string>
    <string name="transport_to_recipient">Leveres i dag</string>
    <string name="returned">Sendt i retur</string>
    <string name="archived">Utlevert</string>
    <string name="sent">Sendt av deg</string>
    <string name="unknown">Foreløpig ukjent</string>

, поэтому в моем макете xml я хочу сделать что-то вроде этого: android: text = "@ {@strings/ + parcelListItem.status.toString ()} "

, чтобы имена строк соответствовали тексту. Я также использую привязку данных для этого, чтобы получить parcelitem.status.

Моя проблема в том, что он просто печатает "@ strings / transport_to_receipient", а не фактический перевод. Есть ли способ сделать это умным способом, или я просто должен сделать метод на нем?

Ответы [ 3 ]

0 голосов
/ 29 января 2020

Чтобы получить доступ к этой строке <string name="transport_to_recipient">Leveres i dag</string>, вам нужно обновить конфигурацию ресурса, просто КАК ЭТО.

   Resources resources= context.getResources();
    Configuration configuration = resources.getConfiguration();
    DisplayMetrics metrics= resources.getDisplayMetrics();
    configuration.setLocale(new Locale("nb"));//country code depend on your XML
    resources.updateConfiguration(configuration,metrics);

nb, если код страны может быть в вашем случае будет другим. Код страны указан на стороне файла string.xml в папке Resource.

0 голосов
/ 03 февраля 2020

Завершено с использованием этого метода на основе ответа выше:

public static int getStringResourceIdByName(Context context, String stringId) {
        if (Utils.isNullOrBlank(stringId))
            stringId = ParcelListItem.Status.unknown.toString();
        return context.getResources().getIdentifier(stringId, "string", context.getPackageName());
    }

и именуется так:

Utils.getStringResourceIdByName(context, parcelListItem.status.toString())
0 голосов
/ 29 января 2020

Вам нужно получить, используя что-то вроде этого:

public String getStringByString(String key) {
    String retString = key;
    int id = getResource().getIdentifier(key, "string", getPackageName());
    if (id != 0) {
        retString = getString(id);
    }

    return retString;
}

Так что в основном это попытается получить имя ресурса из вашего файла. xml файла. Если не получится, вернет ключ.

...