动态设置ImageView的源

时间:2011-04-07 04:53:53

标签: android android-layout android-imageview

我正在尝试根据国家/地区名称在ImageView中设置国家/地区标志。

我遵循惯例,即国家标志图像始终存储在drawable/flag_country_name

例如; drawable / flag_india,drawable / flag_south_africa

到目前为止我写的代码是

imageFlagRight.setImageResource(getFlagResource("India"));

private int getFlagResource(String teamName) {
        if(teamName.equals("India")){
            return R.drawable.flag_india;
        }
        if(teamName.equals("Srilanka")){
            return R.drawable.flag_srilanka;
        }
        if(teamName.equals("New Zealand")){
            return R.drawable.flag_new_zealand;
        }
        if(teamName.equals("Pakistan")){
            return R.drawable.flag_pakistan;
        }
        if(teamName.equals("Srilanka")){
            return R.drawable.flag_srilanka;
        }
        if(teamName.equals("South Africa")){
            return R.drawable.flag_south_africa;
        }
        if(teamName.equals("Austalia")){
            return R.drawable.flag_australia;
        }
        return R.drawable.flag_default;
    }

以上代码正常运行。

现在我想添加更多的县和旗帜。有没有办法减少代码行?喜欢 return R.drawable.flag+underscorise(teamName);

4 个答案:

答案 0 :(得分:6)

String name="flag_" + "india";
public int getFlagResource(Context context, String name) {
   int resId = context.getResources().getIdentifier(name, "drawable", "com.mypackage.namehere");
   return resId;
}

试试这个。

答案 1 :(得分:1)

你必须存储国家名称和R.id值....

当你想要获得那些值并显示它

答案 2 :(得分:1)

来自@Saurabh Pareek的输入

private int getFlagResource(String teamName) {
         String flagString = "flag_"+teamName.replace(" ", "_").toLowerCase();
         int resId = getContext().getResources().getIdentifier(flagString, "drawable", "com.mypackage.namehere");
         if(resId != 0){
             return resId;
         }
         return R.drawable.flag_default;
    }

答案 3 :(得分:0)

<yourimageview>.setImageViewResource(getFlagResource("india"));