您需要將資源ID 傳遞給方法,但您也想存取對應的字串資源。例如,您有 R.drawable.icon,並且您需要整數 ID 和字串“icon”。
使用 Resources.getIdentifier()
一個解是使用 Resources 類別中的 getIdentifier() 方法。此方法將字串資源名稱和資源類型(例如,可繪製)作為參數,並傳回關聯的整數 ID。
// Get the integer ID for the icon int id = resources.getIdentifier("icon", "drawable", getPackageName()); // Retrieve the string resource String stringResource = resources.getString(id);
使用反射
另一個選項就是利用反射直接存取資源ID欄位。請注意,此解決方案可能無法在啟用程式碼/資源壓縮的發布版本中運作。
// Get the R.drawable class Class<?> clazz = R.drawable.class; // Get the field for the icon resource Field idField = clazz.getDeclaredField("icon"); // Get the integer ID int id = idField.getInt(null); // Retrieve the string resource String stringResource = resources.getString(id);
組合兩種方法
為了獲得最大的靈活性,您可以組合這兩種方法。將字串資源名稱傳遞給方法,並在方法中使用首選技術(反射或 getIdentifier())來檢索 ID 和字串。
// Method that accepts the string resource name public void processResource(String resourceName) { // Get the R.drawable class Class<?> clazz = R.drawable.class; try { // Try using reflection to get the ID Field idField = clazz.getDeclaredField(resourceName); int id = idField.getInt(null); // Retrieve the string resource String stringResource = resources.getString(id); } catch (Exception e) { // Fallback to using getIdentifier() int id = resources.getIdentifier(resourceName, "drawable", getPackageName()); String stringResource = resources.getString(id); } // Use the ID and string as needed in your method ... }
以上是如何檢索 Android 資源 ID 及其對應的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!