如何以编程方式基于文件名设置Drawable

时间:2015-09-02 10:54:13

标签: java android android-drawable

我有一个国家/地区数组(字符串) - (来自网络服务)以及作为其标志的Drawables的相应列表 - (在drawables文件夹中)

Drawables标有" cape_verde"或者"加拿大"但是,当这些名字从网络服务中传下来时,它们会以“佛得角”和“#34;或者"加拿大"。

当我调用webservice时,我会进行小写转换并替换一些字符,如下面的代码所示:

String lowerCaseName = countryNameInArray.countryName.toLowerCase();
String replacedCountryName = lowerCaseName.replaceAll(" ", "_");

我的想法是我可以设置一些

R.drawable.replacedCountryName

但很明显它不能使用Strings,因为它需要一个int。

修改

    public View getCustomView(int position, View convertView, ViewGroup parent) {
    countries = res.getStringArray(R.array.countries);

    /********** Inflate spinner_rows.xml file for each row ( Defined below ) ************/
    View row = inflater.inflate(R.layout.country_drop_down_rows, parent, false);

    /***** Get each Model object from Arraylist ********/
    tempValues = null;
    tempValues = (countryDropDownItem) data.get(position);

    TextView label = (TextView) row.findViewById(R.id.spinner_country_textview);
    ImageView country = (ImageView) row.findViewById(R.id.spinner_county_flag_imageview);



    if (position == 0) {

        // Default selected Spinner item
        label.setText("South Africa"); //get the country text
        country.setImageResource(R.drawable.south_africa);

    } else {
        String lowerCaseName = countries.toString().toLowerCase();
        String replacedCountryName = lowerCaseName.replaceAll(" ", "_");
        // Set values for spinner each row
        label.setText(tempValues.countryName); //get the country text
        country.setImageResource(res.getIdentifier(replacedCountryName, "drawable", "com.app.app" ));
    }

    return row;
}

有没有人知道如何解决这个问题?

由于

2 个答案:

答案 0 :(得分:1)

试试这个:

ImageView iw= (ImageView)findViewById(R.id.imageView1);  
int resID = getResources().getIdentifier(drawableName, "drawable",  getPackageName());
iw.setImageResource(resID);

drawableName是您的文件/图像名称,尝试存储在/src/asset/image.png

答案 1 :(得分:1)

getResources().getIdentifier(
            "imagename", "drawable", "com.package.application")