안드로이드 리소스 ID 세부 정보
우리는 일반적으로 findViewById 방법을 사용하여 리소스를 얻습니다. 예를 들어, 우리는 종종 OnCreate 방법에서 그러한 진술을 사용합니다.
btnchecked = (ImageView) findViewById (r.id.imgcheck);
FindViewById는 버튼, 레이블, ListView 및 ImageView와 같은 레이아웃에서 다양한보기 객체를 얻을 수있는 편리한 방법입니다. 이름에서 알 수 있듯이 int 매개 변수 : 리소스 ID가 필요합니다.
리소스 ID는 매우 유용합니다. Android는 다양한 이미지 파일 및 XML 텍스트의 "@+ID"객체를 포함하여 RES 디렉토리에있는 각 리소스에 ID를 자동으로 할당합니다. RES의 하위 디렉토리는 거의 항상 고정되어 있습니다. 예를 들어, xxxxx, 레이아웃, 값 및 드문 경우는 매번 볼 수있는 것과 같이 거의 항상 고정되어 있습니다 : Anim, XML, Row, Color.
안드로이드 교과서는 다음과 같습니다.
RES/ DRAWABLE/ 이미지 파일을 저장하는 데 사용됩니다.
RES/ LAYOUT/는 레이아웃 정의 파일을 저장하는 데 사용됩니다.
RES/ Values/는 일부 변수, 매개 변수 및 기타 파일을 저장하는 데 사용됩니다.
이것이 우리가 이미 알고있는 전부입니다. 또한 Android는 RES 디렉토리의 모든 리소스에 ID를 할당하며 주요 할당 원칙은 다음과 같습니다.
Drawable의 이미지 파일은 항상 파일 당 하나의 리소스 ID입니다.
Android를 사용하는 XML 파일의 각보기 : id = "@+id/xxx"에는 사용되지 않은 리소스 ID가 할당됩니다.
어쩌면 모든 사람이 더 복잡한 다른 규칙을 추가 할 것입니다.
ADK API에는 실제로 리소스 ID를 매개 변수로 사용하는 많은 방법이 있습니다.
예를 들어, GetDrawable 메소드 :
getResources (). getDrawable (r.drawable.sendsms_bk));
말 그대로 GetResources 메소드는 Android.content.res.resources 객체를 반환합니다.
getDrawalbe 메소드는 드로어 가능한 객체를 반환합니다. 우리는 이것이 이미지라는 것을 알고 있습니다.
GetDrawable 메소드에서 사용하는 매개 변수는 리소스 ID입니다.
그러나 이러한 int 리소스 ID는 몇 숫자입니까? 또는 그들이 모두 배치되는 곳. 충분히주의를 기울이면 Gen 디렉토리의 R.java 파일에서 찾을 수 있습니다. 각 16 진수 정수 ID에는 매우 OO 속성 이름이 있으며 모두 공개 정적 최종이며 수동으로 수정하지 않는 것이 좋습니다. 이 리소스 ID는 다른 클래스 계층에 있습니다. 주의 깊게 보면 몇 가지 규칙을 찾을 수 있습니다. 예를 들어, Drawable 클래스의 리소스 ID는 실제로 RES/Drawable 디렉토리의 이미지 파일을 나타냅니다. 레이아웃 클래스에 포함 된 리소스 ID는 실제로 RES/레이아웃 디렉토리의 XML 파일을 나타냅니다. ID 클래스에 포함 된 리소스 ID는 실제로 Android : id = "@+id/xxx"를 사용하여 위젯 객체를 나타냅니다.
위의 이해를 통해 리소스 ID는 "R"로 시작하는 가변 또는 속성이라는 것을 알았습니다. - R 클래스에 모두 정의되어 있기 때문에이 클래스는 Android.r와 동일하지 않으며 동일한 패키지 수준에 있지 않습니다. 전자는 Android.r.layout.simple_expandable_list_item_1, android.r.layout.simple_expandable_list_item_2와 같은 Android 프레임 워크의 리소스를 정의합니다. 이 리소스를 사용 했습니까? 시간이 있다면 시도해 볼 수도 있습니다. 다른 r은 우리 자신의 r이며, 우리 자신의 리소스 ID를 정의합니다. 객체 지향 R.xxx.yyy에서 리소스 ID를 사용할 수 있으며 물론 16 진수로 직접 사용할 수 있습니다.
리소스 ID는 Android에서 매우 중요하므로 리소스 ID를 얻는 한 리소스를 얻을 수 있습니다. 경우에 따라 상수를 리소스 ID로 사용할 수 없기 때문에 (변수로 바꾸고 싶기 때문에) 두 가지 방법으로 리소스 ID를 동적으로 얻을 수 있습니다.
1. 반사
Java의 반성은 너무 강력하여 우리가 필사적 일 때 항상 생각합니다. 코드를 살펴 보겠습니다.
try {field field = r.drawable.class.getfield (type); int i = field.getInt (new R.Drawable ()); log.d (tag, i+""); return i;} catch (예외 e) {log.e (tag, e.tostring ()); r.drawable.unknow;} 반환유형은 변수이며 가능한 값은 "닫기", "편집", "아이콘"등이됩니다. Java의 반사 클래스 필드를 사용하여 R.Drawable 클래스 아래의 필드에 액세스합니다. 실제로 R.Drawable의 필드는 res.drawable-xxxx 디렉토리의 이미지 파일의 리소스 ID라는 것을 알고 있습니다. 따라서 위의 코드를 실행하는 것은 실제로 문자열을 통해 해당 이미지 파일의 리소스 ID를 얻는 것입니다. 예를 들어, 유형의 값이 "아이콘"인 경우 위 코드는 res.drawable-xxxx 디렉토리에서 icon.png 이미지 파일의 리소스 ID를 얻고 당사에 반환합니다. 리소스 ID를 통해 ImageView에 이미지를 표시하는 것은 당연합니다.
2. 리소스 클래스의 getIndifier 메소드를 사용하십시오
반사를 사용하는 것은 여전히 번거 로움입니다. Android.content.res.resources 클래스를 사용하여 같은 일을하는 경우 두 문장 일뿐입니다.
리소스 res = getResources (); return res.getIndifier (유형, "drawable", getPackagename ());
getResources 메소드는 컨텍스트 (즉, 활동 클래스)에서 나오며 리소스 객체를 직접 반환 할 수 있습니다. getIndifier 리소스 방법은 R.Java에서 모든 리소스 ID를 반환 할 수 있습니다. 물론 필드 이름, 클래스 이름 및 패키지 이름의 3 개의 매개 변수를 지정해야합니다. 패키지 이름은 패키지 이름으로 지정된 완전히 자격있는 이름의 일부입니다. 완전히 자격을 갖춘 R 이름이 Android.r 또는 com.company.r 인 경우 패키지 이름은 "Android"또는 "com.company"입니다. getPackagename은 실제로 this.getPackagename () 이며이 클래스의 패키지 이름을 직접 반환합니다.
클래스 이름은 자원이 속한 클래스입니다. 예를 들어, 우리가 알고 있듯이 R.Java 클래스의 여러 고정 클래스 : Drawable, ID, String, Layout 등 및 많은 리소스 ID가 아래에 정의되어 있습니다.
필드 이름은 리소스 ID의 이름입니다. 예를 들어, 리소스 ID 정의 :
공개 정적 최종 int del = 0x7f020002;
DEL은 리소스 ID의 이름이며 0x7F020002는 16 진수 값입니다.
3 개의 매개 변수를 사용하면 getIndifier 메소드가 동적 방법을 비교하여 리소스 ID를 얻을 수 있습니다.
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!