Wie erhalte ich die ID der referenzierten Ressource von einer anderen Ressource?

9

Ich möchte die ID der referenzierten Ressource zur Laufzeit erhalten. Zum Beispiel ist dies mein Code:

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

und ich interessiere mich für die ID der, die R.string.get_startednur den Verweis auf zur R.string.d2c_entryroadblock_start_valueLaufzeit hat.

Sie können auch sehen, wie es im APK-Analysator unten aussieht - das muss ich bekommen @ref/0x7f1302fc

Screenshot des APK-Analysators

Mariusz
quelle

Antworten:

6

Sie können dies mit der Resources#getValue()Methode erhalten, indem Sie falseden resolveRefsParameter übergeben. Zum Beispiel:

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

Wie gezeigt, befindet sich die numerische ID für die Alias-Ressource im Feld TypedValue's data. Wenn Sie es tatsächlich hexadezimal benötigen, können Sie es an übergeben Integer.toHexString(). Und wenn Sie den Namen der Alias-Ressource benötigen, ist dies einfach:

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