2011-03-14 6 views
50

Object (플레이어)를 취하는 복합 UI 요소를 만들고이 플레이어가 재생하는 팀의 해당 이미지를 고르고 싶습니다 (플레이어 개체의 이미지 번호에 대한 문자열 값이 있습니다). 내 프로젝트의 리소스 폴더Android에서 프로그래밍 방식으로 ImageViews 소스를 설정하려면 어떻게해야합니까?

각 플레이어에 올바른 소스를 어떻게 지정합니까? if 및 elses (문자열 값 확인)를 많이 작성하고 res.getDrawable (R.drawable .no1) 등 아니면 소스의 경로를 지정하는 몇 가지 방법으로 문자열을 사용할 수있는 더 우아한 해결책이있다

나는지도에 문자열과 이미지 사이의 관계를 넣어 것

답변

88

:

문자열이 (이전의 경우처럼) 이미지보다 같은 이름이있는 경우

ImageView image; 
image.setImageResource(map.get("blah")); 

또는, 당신은이 방법을 사용하여 리소스를로드 할 수

Map<String, Integer> map = new HashMap<String, Integer>(); 
map.put("blah", R.drawable.blah); 
// etc... 

그런 다음 setImageResource(int) 방법을 사용할 수 있습니다 : Android and getting a view with id cast as a string

+0

Darn, 26 초 만에 나를 때려주십시오. –

+1

@MohitDeshpande : 하하하하하. – Cristian

+1

네, 훌륭합니다. R.etc이 ints를 반환한다는 사실을 잊어 버렸습니다 :/Thanks! – blackaardvark

3

난 당신이 문자열에서 이미지 리소스를 표시하려면, 제대로 이해하고. 사용자가 사용자 지정 ListPreference에서 이미지를 선택할 수있는 App에서이 작업을 수행하면 MainActivity 레이아웃에 표시됩니다. 드로어 블 리소스 ID는 드로어 블 리소스 ID (String) 예제 : "@ drawable/logo_image"와 일치하는 문자열로 SharedPreferences에 저장됩니다.

SharedPreferences shared = getSharedPreferences("com.joshuariddle.recoveryworkscounter.settings", MODE_PRIVATE); 
      String logo_id = (shared.getString("pref_logo","")); 

이 즉 드로어 블/사진 LOGO_IMAGE @ 문자열로 드로어 블 리소스를 반환 : 내가 가진 ListPreference의 값을 당깁니다. 그런 다음 내 레이아웃에 그 드로어 블/사진 이미지를 삽입 내가 사용

ImageView iv_logo = (ImageView) findViewById(R.id.imgLogo); 
    iv_logo.setImageResource(getResources().getIdentifier(logo_id, "drawable", "com.yourpackage")); 

이는 ID (int)를 반환하는 아래의 메소드에 의해 반환 INT에서 사용) (setImageResource과 새로운 당김에 이미지 뷰 리소스를 변경됩니다 com.yourpackage에서 드로어 블 리소스를 나타내는 문자열 :

getResources().getIdentifier(logo_id, "drawable", "com.yourpackage") 

또한 ID 등을 얻기 위해이 방법을 사용하는 등 레이아웃 배경으로 그릴 수 등을 사용하는 다른 자원을 변경하려면이 같은 방법으로 당신은 단지 한 사용할 수 있습니다 int :

getResources().getIdentifier("Resource Id String", "drawable", "com.yourpackage") 
관련 문제