ホームページ >Java >&#&チュートリアル >Android リソース ID とそれに対応する文字列を取得するにはどうすればよいですか?

Android リソース ID とそれに対応する文字列を取得するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-22 07:45:42887ブラウズ

How to Retrieve an Android Resource ID and its Corresponding String?

Android: 文字列からリソース ID を取得

問題

リソース ID をメソッドに渡す必要がありますが、対応する文字列リソース。たとえば、R.drawable.icon があり、整数 ID と文字列 "icon" の両方が必要だとします。

Solution

Using Resources.getIdentifier()

解決策の 1 つは、Resources クラスの getIdentifier() メソッドを使用することです。このメソッドは、文字列リソース名とリソース タイプ (drawable など) を引数として受け取り、関連付けられた整数 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。