Как получить идентификатор ресурса, на который ссылается другой ресурс?

9

Я хотел бы получить идентификатор указанного ресурса во время выполнения. Например, это мой код:

<string name="d2c_entryroadblock_start_value" translatable="false">@string/get_started</string>

и меня интересует идентификатор R.string.get_startedимеющей только ссылку на R.string.d2c_entryroadblock_start_valueвремя выполнения.

Вы также можете увидеть, как это выглядит в APK анализаторе ниже - мне нужно получить это @ref/0x7f1302fc

APK анализатор скриншот

Мариуш
источник

Ответы:

6

Вы можете получить , что с Resources#getValue()методом, проходя falseпо resolveRefsпараметру. Например:

TypedValue value = new TypedValue();
getResources().getValue(R.string.alias_name, value, false);
int aliasedId = value.data;

Как показано, числовой идентификатор для совмещенного ресурса будет в TypedValue«S dataобласти. Если вам действительно нужно это в шестнадцатеричном формате, вы можете передать его Integer.toHexString(). И если вам нужно имя псевдонима ресурса, то это просто:

String aliasedName = getResources().getResourceEntryName(value.data);
Майк М.
источник