뷰 클래스 만들기

Compose 방식 사용해 보기
Jetpack Compose는 Android에 권장되는 UI 도구 키트입니다. Compose에서 레이아웃을 사용하는 방법을 알아보세요.
<ph type="x-smartling-placeholder"></ph> Compose의 맞춤 레이아웃 → 를 통해 개인정보처리방침을 정의할 수 있습니다.

잘 설계된 맞춤 뷰는 잘 설계된 다른 클래스와 같습니다. Kubernetes는 특정 집합의 CPU와 메모리를 효율적으로 사용하는 등의 작업을 할 수 있습니다. 포함 데이터 애널리스트가 되는 클래스를 잘 디자인한 경우 맞춤 뷰는 다음을 실행해야 합니다.

  • Android 표준 준수
  • Android XML 레이아웃에서 작동하는 맞춤 스타일 속성을 제공합니다.
  • 접근성 이벤트를 전송합니다.
  • 여러 Android 플랫폼과 호환

Android 프레임워크는 일련의 기본 클래스와 XML 태그를 제공하여 이 모든 요구사항을 충족 요구사항을 충족해야 합니다 이 과정에서는 Android 프레임워크를 사용하여 Core API를 만드는 방법을 설명합니다. 보기의 기능을 클래스에 대해 자세히 알아보세요.

자세한 내용은 맞춤 뷰 구성요소에서 자세히 알아보세요.

뷰 서브클래스화

Android 프레임워크에 정의된 모든 뷰 클래스는 View 내 커스텀 뷰는 View를 직접 확장하거나 시간 절약을 위해 기존 뷰 서브클래스(예: Button)

Android 스튜디오가 뷰와 상호작용하도록 허용하려면 최소한 ContextAttributeSet 객체를 매개변수로 사용합니다. 이 생성자를 사용하면 Layout Editor에서 뷰의 인스턴스를 만들고 수정할 수 있습니다.

Kotlin

class PieChart(context: Context, attrs: AttributeSet) : View(context, attrs)

자바

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

맞춤 속성 정의

사용자 인터페이스에 내장 View를 추가하려면 XML 요소에서 지정하고 제어 영역 요소의 모양과 동작을 지정할 수 있습니다. 또한 맞춤 측정기준을 추가하고 할 수 있습니다. 받는사람 맞춤 뷰에서 이 동작을 사용 설정하려면 다음을 실행하세요.

  • <declare-styleable> 리소스 요소에서 뷰의 커스텀 속성을 정의합니다.
  • XML 레이아웃에서 속성 값을 지정합니다.
  • 런타임에 속성 값을 가져옵니다.
  • 검색된 속성 값을 뷰에 적용합니다.

이 섹션에서는 맞춤 속성을 정의하고 이 속성의 값을 지정하는 방법에 관해 설명합니다. 다음 섹션에서는 값을 검색하고 적용할 수 있습니다.

맞춤 속성을 정의하려면 프로젝트에 <declare-styleable> 리소스를 추가합니다. 이러한 자원은 보통 프로젝트에 배치되는 res/values/attrs.xml 파일. 그 내용은 다음과 같습니다. attrs.xml 파일의 예는 다음과 같습니다.

<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>

이 코드는 두 개의 맞춤 속성 showTextlabelPosition를 선언합니다. 스타일 지정 가능 항목에 속하는 항목(이름: PieChart) 스타일 지정이 가능한 항목의 이름은 규칙에 따라 동일합니다. 이름을 클래스 이름 맞춤 뷰를 정의합니다. 이 규칙을 따를 필요는 없지만 많이 사용되는 코드 편집기는 이러한 명명 규칙에 따라 명령문을 완성합니다.

사용자 지정 속성을 정의하고 나면 기본 제공 항목처럼 레이아웃 XML 파일에서 사용할 수 있습니다. 속성 유일한 맞춤 속성이 다른 네임스페이스에 속한다는 점이 다릅니다. 소속하기보다는 http://schemas.android.com/apk/res/android 네임스페이스에 속하는 경우 http://schemas.android.com/apk/res/[your package name]에 속합니다. 예를 들어 다음에 대해 정의된 속성 PieChart:

<?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-auto">
 <com.example.customviews.charting.PieChart
     custom:showText="true"
     custom:labelPosition="left" />
</LinearLayout>

긴 네임스페이스 URI를 반복할 필요가 없도록 샘플에서는 xmlns 지시어. 이 지시어는 custom 별칭을 http://schemas.android.com/apk/res/com.example.customviews 네임스페이스 네임스페이스에 사용할 별칭을 선택할 수 있습니다.

레이아웃에 맞춤 뷰를 추가하는 XML 태그의 이름을 확인하세요. Kubernetes는 정규화된 이름 맞춤 뷰 클래스를 제공합니다. 뷰 클래스가 내부 클래스인 경우 추가로 한정합니다. 뷰의 외부 클래스 이름으로 대체합니다. 예를 들어 PieChart 클래스에는 PieView라는 내부 클래스가 있습니다. 이 클래스의 맞춤 속성을 com.example.customviews.charting.PieChart$PieView 태그를 사용합니다.

맞춤 속성 적용

XML 레이아웃에서 뷰를 만들면 XML 태그의 모든 속성을 읽고 추출 뷰 생성자에 AttributeSet 비록 AttributeSet에서 직접 값을 읽을 수 있습니다. 이렇게 하면 다음과 같은 단점이 있습니다.

  • 속성 값 내의 리소스 참조가 확인되지 않습니다.
  • 스타일은 적용되지 않습니다.

대신 AttributeSetobtainStyledAttributes()입니다. 이 메서드는 TypedArray 배열 값이 이미 역참조되고 스타일이 지정되었습니다.

Android 리소스 컴파일러는 다음을 호출하기 위해 많은 작업을 합니다. obtainStyledAttributes() 더 쉽게 만들 수 있습니다 <declare-styleable>마다 res/ 디렉터리에 있는 경우, 생성된 R.java는 속성 배열을 둘 다 정의합니다. ID와 배열에 있는 각 특성의 색인을 정의하는 상수입니다. 사전 정의된 읽을 수 있는 상수 TypedArray의 속성을 가져옵니다. 방법은 다음과 같습니다. PieChart 클래스 해당 속성을 읽습니다.

Kotlin

init {
    context.theme.obtainStyledAttributes(
            attrs,
            R.styleable.PieChart,
            0, 0).apply {

        try {
            mShowText = getBoolean(R.styleable.PieChart_showText, false)
            textPos = getInteger(R.styleable.PieChart_labelPosition, 0)
        } finally {
            recycle()
        }
    }
}

자바

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);
       textPos = a.getInteger(R.styleable.PieChart_labelPosition, 0);
   } finally {
       a.recycle();
   }
}

TypedArray 객체는 공유 리소스인 사용 후 재활용해야 합니다

속성 및 이벤트 추가

속성은 뷰의 동작과 모양을 제어하는 강력한 방법이지만 읽을 수만 있습니다 뷰가 초기화될 때 동적 동작을 제공하려면 속성 getter를 노출하고 각각에 대한 setter 쌍 맞춤 속성입니다. 다음 스니펫은 PieChart가 속성을 노출하는 방법을 보여줍니다. 호출: showText

Kotlin

fun isShowText(): Boolean {
    return mShowText
}

fun setShowText(showText: Boolean) {
    mShowText = showText
    invalidate()
    requestLayout()
}

자바

public boolean isShowText() {
   return mShowText;
}

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

setShowTextinvalidate()를 호출합니다. 및 requestLayout() 이러한 통화는 뷰가 안정적으로 작동하는지 확인합니다 요구사항 속성이 변경되면 뷰를 무효화하기 위해 따라서 다시 그려야 한다는 것을 알 수 있습니다. 마찬가지로 다음과 같은 경우 새 레이아웃을 요청해야 합니다. 속성의 변경사항을 영향을 줄 수 있습니다. 이러한 메서드 호출을 잊어버리면 찾기 어려운 있습니다.

사용자 지정 뷰는 중요한 이벤트를 전달하는 이벤트 리스너도 지원해야 합니다. 대상 인스턴스, PieChart OnCurrentItemChanged라는 맞춤 이벤트를 노출하여 리스너에게 알립니다. 사용자가 원형 차트에서 새로운 원형 차트 조각에 초점을 맞춥니다.

특히 나인 유일한 사용자인 경우 속성 및 이벤트 노출을 잊어버리기 쉽습니다. 확인할 수 있습니다. 뷰의 인터페이스를 신중하게 정의하는 데 시간을 들이면 향후 유지관리를 줄일 수 있음 얻을 수 있습니다. 따라야 할 규칙은 표시 요소에 영향을 주는 모든 속성을 항상 노출하는 것입니다. 외양이나 행동을 맞춤 보기를 만들 수 있습니다.

접근성을 고려한 디자인

맞춤 뷰는 다양한 사용자를 지원해야 합니다. 여기에는 장애 터치스크린을 보거나 사용하지 못하게 합니다. 장애가 있는 사용자를 지원하기 위해 다음을 수행하세요.

  • android:contentDescription를 사용하여 입력란 라벨 지정 속성의 값을 제공합니다.
  • sendAccessibilityEvent()를 호출하여 접근성 이벤트 전송 변경할 수 있습니다.
  • D패드 또는 트랙볼과 같은 대체 컨트롤러를 지원합니다.

액세스 가능한 뷰 만들기에 대한 자세한 내용은 다음을 참조하세요. <ph type="x-smartling-placeholder"></ph> 앱의 접근성 높이기