안드로이드 APK 플러그인을 스키닝 달성

아이디어를 스키닝 ​​:

1. 스키닝 할 때?

XML로드 껍질은, 사용자가 스키닝 전에 색상을 볼 경우 XML은, 스키닝 전에로드, 사용자 경험은 좋지 않다.

2. 피부는 무엇입니까?

피부 APK이며, 컬러 사진을 포함하는 리소스 패키지입니다.

3. 재 포장해야 컨트롤의 어떤 종류의?

컨트롤은 텍스트 뷰의 텍스트 색상과 같은 배경 이미지가 포함되어 있습니다.

4. 어떻게 설치 자원으로 피부에 맞게?

자원 이름이 일치

 

 

단계 :

스키닝 전에로드 1.xml은 컨트롤이 수집 재 포장해야 함을 의미한다. 따라서,로드 프로세스 XML을 모니터링 할 수 있습니다.

1  공용  클래스 BaseActivity는 확장 활동 {
 2  
3      SkinFactory skinFactory을;
4  
5      @Override
 6      보호  공극 에서 onCreate (@Nullable 번들 savedInstanceState) {
 7          슈퍼 .onCreate (savedInstanceState);
8  
9          // 监听XML生成的过程
10          skinFactory = 새로운 SkinFactory ();
11          LayoutInflaterCompat.setFactory (getLayoutInflater () skinFactory);
12      }
 13 }

 

2. 필요가 용기에 컨트롤의 스킨을 수집하고 (예를 들어 직접 껍질을 자신의 논리를 변경하지 않습니다 : 각 공간에 추가하지 않는 내부 표면 치환술 필요가 : "응용 프로그램 : ......"사용자 지정 컨트롤을 속성)

생각 :

APK에 피부 아이디 아이디 (1) 설치 같은?

(2) 이미지 리소스, 리소스가 자동으로 생성 된 번호 R의 색에 대응

파일이 같은 R의 R 파일의 리소스 ID (3) 피부 팩, ID 자원 ID와 응용 프로그램 자원 인 경우? - 그것은 동일하지 않습니다

 

3. 제어 활동의 복수 (SkinView) 껍질 제어 복수의 속성에 대응하는 (SkinItem)

이 값을 캡슐화하는 SkinItem :

  • attrName- 속성 이름 (배경)
  • 16 진수 attrValue- id 속성 값 (@ 색상 / colorPrimaryDark)
  • attrType-- 종류 (색)
  • 아이디 (ID의 R 파일)
1 개  클래스 SkinItem {
 2          // ATTRNAME 배경 
3          문자열 ATTRNAME;
4  
5          INT REFID;
6          // 资源名字@ 색상 / colorPrimaryDark 
7          문자열 ATTRVALUE;
8          //   당김 컬러 
9          문자열 ATTRTYPE;
10  
11          공중 SkinItem (문자열 ATTRNAME이 값 int {REFID 문자열 ATTRVALUE 문자열 ATTRTYPE)
 12               .attrName = ATTRNAME;
13               .refId = REFID;
14               .attrValue =ATTRVALUE;
15               .attrType = ATTRTYPE;
16          }
 17  
18          공중 문자열 getAttrName () {
 19              반환 ATTRNAME;
20          }
 21  
22          공중  INT getRefId는 () {
 23              반환 REFID;
24          }
 25  
(26)          공공 문자열 getAttrValue () {
 27              반환 ATTRVALUE;
28          }
 29  
30          공중 문자열 getAttrType () {
 31              반환 ATTRTYPE;
(32)         }
 33      }

SkinView :

. 1 개  클래스 SkinView {
 2          개인 보기보기;
 . 3          개인 목록 <SkinItem> 목록;   // 설정 수확 재 포장이 필요합니다 
4.  
5.          공공 SkinView (보기보기, 목록 <SkinItem> 목록) {
 6.              다음은이 .view = 보기;
 . 7              은이 . = 목록 목록;
 . 8          }
 9.      }

 

4. 일단 수집, 피부 응용 프로그램 (로드시 XML 피부)

 

 

SkinManager 만들기 피부 APK를 얻기 위해, 응용 프로그램은 SkinManager에 의해 피부 APK를 얻을

addAssetpath () 메소드를 반영하여 얻어진 AsserManager, 이에 skinResource 인스턴스화,이 방법에 의해 얻어진 후 피부 APK, 그 패키지 매니저를 통해 (1) 부하 스킨 패키지 (loadSkin). GetPackageArchiveInfo (경로, PackageManager.GET_ACTIVITIES) .packageName은, 피부가 얻어 패키지 이름

"colorAccent"에 의해 ID를 확인하는 방법은 다음과 같습니다; (2) 색상을 획득 (getColor에서)는 고해상도, 예를 들어 이름을 얻기 위해 판사 skinResource가 비어 있습니다

추천

출처www.cnblogs.com/jiani/p/11644608.html