[Android Training UI] 사용자 정의 뷰 만 들 기 (Lesson 1 - 뷰 클래스 만 들 기)

56630 단어 android
내 홈 페이지 에 게시  http://kesenhoo.github.io/blog/2013/06/30/android-training-ui-creating-custom-views-lesson-1/  ,방문 을 환영 합 니 다!
 
디자인 이 좋 은 종 류 는 항상 비슷 하 다.그것 은 CPU 와 메모리 등 을 효과적으로 사용 할 수 있 는 좋 은 인 터 페 이 스 를 사용 합 니 다.디자인 이 좋 은 클래스 가 되 기 위해 사용자 정의 view 는:
Android 표준 규칙 준수.
사용자 정의 스타일 속성 값 을 제공 하고 Android XML Layout 에서 인식 할 수 있 습 니 다.
접근 가능 한 이 벤트 를 보 냅 니 다.
안 드 로 이 드 를 호 환 할 수 있 는 다양한 플랫폼.
Android 의 framework 는 위 에서 요구 하 는 View 를 만 드 는 데 도움 을 주 는 기본 클래스 와 XML 탭 을 많이 제공 합 니 다.이 수업 은 Android framework 를 사용 하여 view 의 핵심 기능 을 만 드 는 방법 을 소개 합 니 다.
Subclass a View
Android framework 에서 정의 하 는 view 클래스 는 모두 View 에서 계승 합 니 다.사용자 정의 view 도 View 를 직접 계승 하거나 기 존의 하위 클래스 (예 를 들 어 Button) 를 계승 하여 시간 을 절약 할 수 있 습 니 다.
Android Developer Tools 가 view 를 식별 할 수 있 도록 최소한 하나의 constructor 를 제공 해 야 합 니 다. contenx 와 AttributeSet 대상 을 매개 변수 로 포함 합 니 다.이 constructor 는 layot editor 가 view 의 인 스 턴 스 를 만 들 고 편집 할 수 있 도록 합 니 다.
1

2

3

4

5

class PieChart extends View {  public PieChart(Context context, AttributeSet attrs) {  super(context, attrs);  } } 

Define Custom Attributes
UI 에 내 장 된 View 를 추가 하기 위해 서 는 XML 속성 을 통 해 스타일 과 행동 을 지정 해 야 합 니 다.사용자 정의 view 를 실현 하기 위해 서 는 다음 과 같이 해 야 합 니 다.
자원 탭 에서 사용자 정의 속성 XML layot 에서 속성 값 지정 실행 중 속성 치 획득 가 져 온 속성 값 을 view 에 적용 합 니 다 자체 설정 한 속성 을 정의 하기 위해 추가 프로젝트 에 자원 을 넣 으 세 요.res / values / attrs. xml 파일 에 배치 합 니 다.다음은 attrs. xml 파일 의 예제 입 니 다.
1

2

3

4

5

6

7

8

9

<resources>  <declare-styleable name="PieChart">  <attr name="showText" format="boolean" />  <attr name="labelPosition" format="enum">  <enum name="left" value="0"/>  <enum name="right" value="1"/>  </attr>  </declare-styleable> </resources> 

위의 코드 는 2 개의 자체 설정 속성 을 설명 합 니 다. showText 와 labelPosition 은 모두 PieChart 프로젝트 의 styleable 인 스 턴 스 에 속 합 니 다.stylable 인 스 턴 스 의 이름 은 보통 사용자 정의 view 이름과 일치 합 니 다.비록 이것 은 이 convention 을 준수 해 야 한 다 는 엄격 한 규정 이 없 지만, 많은 유행 하 는 코드 편집 기 는 이 명명 규칙 에 의존 하여 statement completion 을 제공한다.
설정 한 속성 을 정의 하면 layot XML 파일 에서 사용 할 수 있 습 니 다.유일 하 게 다른 것 은 당신 이 설정 한 속성 이 서로 다른 네 임 스페이스 에 속 하 는 것 입 니 다.에 속 하지 않다,...http://schemas.android.com/apk/res/android네 임 스페이스http://schemas.android.com/apk/res/[your package name]。예 를 들 어 PieChart 에 정 의 된 속성 을 사용 하 는 방법 을 보 여 줍 니 다.
1

2

3

4

5

6

7

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews">  <com.example.customviews.charting.PieChart  custom:showText="true"  custom:labelPosition="left" /> </LinearLayout> 

긴 문자열 의 namespace 이름 을 입력 하지 않도록 예제 에 서 는 custom 을 별명 으로 사용 합 니 다. 다른 이름 으로 namespace 를 선택 할 수도 있 습 니 다.
view 가 inner class 라면 이 view 의 outer class 를 지정 해 야 합 니 다.마찬가지 로 PieChart 에 inner class 가 있다 면 PieView 라 고 합 니 다.이 클래스 에 설 치 된 속성 을 사용 하기 위해 서 는 com. example. customviews. charting. PieChart $PieView 를 사용 해 야 합 니 다.
Apply Custom Attributes
view 가 XML layot 에서 생 성 되 었 을 때 xml 탭 의 속성 값 은 모두 resource 에서 읽 어 내 고 view 에 전 달 된 constructor 를 AttributeSet 매개 변수 로 합 니 다.AttributeSet 에서 수 치 를 직접 읽 을 수 있 지만 단점 이 있 습 니 다 (아래 두 가지 이 유 를 알 아 보지 못 했 습 니 다).
속성 을 가 진 자원 은 분 해 를 거치 지 않 았 습 니 다 Styles 는 사용 되 지 않 았 습 니 다 대신 obtainStyled Attributes () 를 통 해 속성 값 을 가 져 옵 니 다.이 방법 은 간접 referenced 와 styled 의 대상 TypedArray 을 전달 합 니 다.
아래 의 예 시 를 보십시오.
1

2

3

4

5

6

7

8

9

10

11

12

13

14

public PieChart(Context context, AttributeSet attrs) {  super(context, attrs);  TypedArray a = context.getTheme().obtainStyledAttributes(  attrs,  R.styleable.PieChart,  0, 0);  try {  mShowText = a.getBoolean(R.styleable.PieChart_showText, false);  mTextPos = a.getInteger(R.styleable.PieChart_labelPosition, 0);  } finally {  a.recycle();  } } 

TypedArray 대상 은 shared 자원 이 므 로 사용 후 회수 해 야 합 니 다.
Add Properties and Events
Attributes 는 view 의 행동 과 외관 을 제어 하 는 강력 한 방법 이지 만 view 가 초기 화 될 때 만 읽 을 수 있 습 니 다.동적 인 행동 을 제공 하기 위해 서 는 적절 한 getter 와 setter 방법 을 드 러 내야 합 니 다.다음 코드 는 이 기술 을 어떻게 사용 하 는 지 보 여 줍 니 다.
1

2

3

4

5

6

7

8

9

public boolean isShowText() {  return mShowText; } public void setShowText(boolean showText) {  mShowText = showText;  invalidate();  requestLayout(); } 

setShowText 방법 에 호출 invalidate() 이 있 음 을 주의 하 십시오.  requestLayout(). view 의 일부 내용 이 변 할 때 invalidate 를 호출 하여 시스템 에 이 view 를 redraw 로 알려 야 합 니 다. 일부 요소 변화 가 구성 요소 의 크기 변 화 를 일 으 킬 때 requestLayout 방법 을 호출 해 야 합 니 다.
사용자 정의 view 도 이벤트 에 응답 할 수 있 는 모니터 가 필요 합 니 다.예 를 들 어 PieChart 는 자체 설 치 된 이벤트 OnCurrent Item Changed 를 노출 하여 모니터 에 알 렸 고 사용 자 는 새로운 구성 요소 로 초점 을 바 꾸 었 습 니 다.
우 리 는 노출 속성 과 사건 을 쉽게 잊 어 버 립 니 다. 특히 이 view 의 유일한 사용자 일 때.view 의 상호작용 을 자세히 정의 하 는 데 시간 이 좀 걸 립 니 다.좋 은 규칙 은 항상 모든 속성 과 사건 을 폭로 하 는 것 이다.
Design For Accessibility
Your custom view should support the widest range of users. This includes users with disabilities that prevent them from seeing or using a touchscreen. To support users with disabilities, you should:
Label your input fields using the android:contentDescription attribute
Send accessibility events by calling sendAccessibilityEvent() when appropriate.
Support alternate controllers, such as D-pad and trackball
For more information on creating accessible views, see  Making Applications Accessible  in the Android Developers Guide.

좋은 웹페이지 즐겨찾기