ぴよぴよエンジニアの日記

クラウドベンダーに勤める見習いSEの日記です。発言は私自身の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

Xamarin.Androidでファイル名からリソースを取ってきたいとき

共通クラスのプロパティにリソースのファイル名を持たせて各OS間で統合したいときのAndroid側のハンドリングです.

(そもそもこの設計がベストプラクティスではないと思われます...)

public class Item
{
    public String FileName { get; set; }
}

上記のようにリソース(drawable, string, colorなど)のファイル名(またはリソース名)をプロパティとして持たせます.

class ResourceConverter
{
    public static int GetDrawableID(Context context, String fileName)
    {
        return context.Resources.GetIdentifier(fileName, "drawable", context.PackageName);
    }

    public static int GetStringID(Context context, String stringName)
    {
        return context.Resources.GetIdentifier(stringName, "string", context.PackageName);
    }

    public static int GetColorID(Context context, String colorName)
    {
        return context.Resources.GetIdentifier(colorName, "color", context.PackageName);
    }
}

Android側ではファイル名(リソース名)からリソースIDを取得します.

ImageView.SetImageResource(
    ResourceConverter.GetDrawableID(this.Context, Item.FileName));

使用例です.



おそらくとてもナイーブな手法だと思われます...
staticなリソースを各OS間でどう共通化するのか、ベストプラクティスを知っている方はぜひ教えてくださいorz