Jak uzyskać identyfikator odnośnego zasobu przez inny zasób?

9

Chciałbym uzyskać identyfikator zasobu odniesienia w czasie wykonywania. Na przykład to mój kod:

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

i interesuje mnie identyfikator R.string.get_startedposiadania tylko odniesienia R.string.d2c_entryroadblock_start_valuew czasie wykonywania.

Możesz również zobaczyć, jak to wygląda w analizatorze APK poniżej - muszę to zdobyć @ref/0x7f1302fc

Zrzut ekranu analizatora APK

Mariusz
źródło

Odpowiedzi:

6

Można dostać się z Resources#getValue()metodą, przechodząc falsedo resolveRefsparametru. Na przykład:

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

Jak widać, identyfikator numeryczny dla zasobu aliasing będzie w TypedValue„s datadziedzinie. Jeśli faktycznie potrzebujesz go w systemie szesnastkowym, możesz przekazać go do Integer.toHexString(). A jeśli potrzebujesz nazwy aliasu, to po prostu:

String aliasedName = getResources().getResourceEntryName(value.data);
Mike M.
źródło