2013-08-09 2 views
1

/values/colors.xml에 정의 된 일부 색상이 있습니다.알려진 색상 이름의 색상 ID를 얻는 방법

프로그래밍 방식으로 특정 색상의 ID를 어떻게 얻을 수 있습니까? 예 : R.color.my_color 색상의 이름을 알고있는 경우.

+0

다음을 사용할 수 있습니다. ** getResources(). getColor (R.color.idname); ** – krishna

+0

찾고 계신 것이 있으십니까? [색상 자원에서 색상 정보 가져 오기] (0120-333-2112) –

답변

6

이 시도 :

public int getColorByName(String name) { 
    int colorId = 0; 

    try { 
     Class res = R.color.class; 
     Field field = res.getField(name); 
     colorId = field.getInt(null); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return colorId; 
} 

및 귀하의 경우 name

my_color입니다 :

getColorByName("my_color"); 
1

당신이 일단 Context 당신이 getResources() 호출 할 수 있습니다 - 모두 color 및 자원의 id를 얻기 위해 그것을 쿼리 이후 Resources 참조를 얻을합니다.

2

getIdentifier라는 Resources에서 전용 방법이있다.
검색하는 내용을 달성하는 "정상적인"방법입니다. thisActivity 또는 Context 서브 기준이다

final int lMyColorId = this.getResources().getIdentifier("my_color", "color", this.getPackageName()); 

보십시오. (필요하다면 getActivity()으로 바꿉니다.)
이것은 느리지 만, 이것은 받아 들여진 대답이 제안하는 반사 메커니즘을 통해 필드에 접근하는 것보다 느려서는 안됩니다.

일부 자원 유형에 대한 사용 예제는 here입니다.

+0

이 링크는 질문에 대한 답변 일지 모르지만 필수 요소 인 색상 정보를 포함하는 것이 좋습니다. 답변의 일부를 참조 용으로 제공하십시오. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. –

+0

이것은 업데이트되었습니다. 그리고 내 대답이 옳았지만 아직 불완전한 방식으로, 당신은 그것을 정당화하지 못했습니다.특히이 사이트에 대한 첫 번째 대답이라고 생각하면 이러한 행동은 매우 바람직하지 않습니다. – ultranestor

+0

귀하의 정보를 위해 나는 투표하지 않았습니다. 방금 귀하의 답변을 검토하고 올바른 방향으로 안내합니다. –

0

ImageView의 배경을 설정하려고했을 때 허용되는 대답이 올바르지 않다고 밝혀졌습니다. 그런 다음 배경을 자원으로 설정하려고 시도했지만 완벽하게 작동했습니다.

그래서 다른 혼란이 생기면 @MarcinOrlowski의 대답을 복사하여 여기에 모두 넣으 려합니다.

리플렉션을 사용하여 색상의 리소스 ID를 얻는 기능은 다음과 같습니다.

public int getColorByName(String name) { 
    int colorId = 0; 

    try { 
     Class res = R.color.class; 
     Field field = res.getField(name); 
     colorId = field.getInt(null); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return colorId; 
} 

그럼 이제 이것을 호출하여 리소스 ID를 얻을 수 있습니다. 당신은 당신이 여기있어 자원 ID를 사용하여이 색상을 설정하는 동안

int resourceId = getColorByName("my_color"); 

는, 당신은이 작업을 수행해야합니다.

myImageView.setBackgroundResource(resourceId); 

작동하지 않는 myImageView.setBackgroundColor(resourceId) 설정을 시도했습니다.

관련 문제