Исходный код Android для Android: обработка текстовых атрибутов? - PullRequest
1 голос
/ 17 декабря 2011

Я пытаюсь найти исходный исходный код Android, где атрибут android: text из файлов макета преобразуется в фактическую строку, указанную через @ string / (например: android: text = "@ string / hello").Причина в следующем: я создал совершенно другой способ настройки макетов, используя собственный XML, который, в свою очередь, использует предварительно написанные виджеты, например:

<dialog name="Homepage">
  <field type="Combobox" label="Enter">
</dialog>

Что я хочу сделать: Iхочу иметь возможность изменить атрибут label в моем примере на: label = "@ string / enter", чтобы я мог использовать функцию локализации в Android.

Но для обработки этих команд @stringМне нужно знать, где это сделано в исходном исходном коде Android (например, в версии 2.3), чтобы я мог имитировать поведение.Пока единственный известный мне способ получения строковых ресурсов - это использовать context.getString (int resID) - проблема в том, как мне перевести строку «@ string / enter» в идентификатор res?Я предполагаю, что не могу, поэтому мне любопытно, как Android справляется с этим.

Я был бы очень благодарен, если бы кто-то мог указать мне правильное направление, и я надеюсь, что мои объяснения не слишком запутывают:).

1 Ответ

0 голосов
/ 17 декабря 2011

[..] проблема в том, как мне перевести строку "@ string / enter" в идентификатор res?

Вы можете использовать Resources.getIdentifier() для этого.

Небольшая выборка, которая получает идентификатор res @string/enter:

Resources r = getResources();
int resId = r.getIdentifier("enter", "string", getPackageName());

Учитывая, что формат для ресурсов всегда одинаков, вы можете проанализировать все три аргументаиз этой строки и заполните их в getIdentifier():

@[<package_name>:]<resource_type>/<resource_name>

из Доступ к ресурсам

...