Bagaimana cara mendapatkan ID sumber daya yang dirujuk oleh sumber daya yang berbeda?

9

Saya ingin mendapatkan ID sumber daya yang dirujuk dalam runtime. Misalnya ini adalah kode saya:

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

dan saya tertarik pada ID R.string.get_startedyang hanya memiliki referensi ke R.string.d2c_entryroadblock_start_valuedalam runtime.

Anda juga dapat melihat tampilannya di penganalisa APK di bawah ini - saya perlu mendapatkannya @ref/0x7f1302fc

Tangkapan layar penganalisa APK

Mariusz
sumber

Jawaban:

6

Anda bisa mendapatkannya dengan Resources#getValue()metode, melewati falseuntuk resolveRefsparameter. Sebagai contoh:

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

Seperti ditunjukkan, numerik ID untuk sumber daya alias akan di TypedValue's datalapangan. Jika Anda benar-benar membutuhkannya dalam heksadesimal, Anda dapat meneruskannya ke Integer.toHexString(). Dan, jika Anda membutuhkan nama sumber daya alias, maka itu hanya:

String aliasedName = getResources().getResourceEntryName(value.data);
Mike M.
sumber