오래전 체험했었는데 기억이 나질 않음.
내가 만든 커스텀뷰
XML 에 정의하고 실행하니 에러가 발생
<com.sample.myapp.MyView
android:id="@+id/my_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
에러메시지 : android.view.InflateException ... Error inflating class ...
1. Custom View의 생성자 확인
MyView가 커스텀 뷰라면, XML로 인플레이트 될 때 적절한 생성자를 가지고 있어야 합니다. 보통 세 가지 생성자를 모두 구현해 주는 것이 좋습니다.
public class MyView extends View {
// 1. XML에서 사용될 때 호출되는 생성자
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
// 2. 프로그래밍적으로 사용될 때 호출되는 생성자
public MyView(Context context) {
super(context);
}
// 3. XML에서 스타일 속성도 함께 사용할 때 호출되는 생성자
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
2. 패키지 이름 확인
XML에서 선언된 MyView의 경로와 실제 MyView 클래스의 경로가 일치해야 합니다. 패키지명을 정확히 확인하세요.
3. ProGuard 설정 확인
앱이 ProGuard를 사용하고 있다면, 커스텀 뷰의 클래스 이름이 난독화되어 오류가 발생할 수 있습니다. ProGuard 설정 파일에 다음과 같이 커스텀 뷰를 제외시키는 규칙을 추가하세요.
4. 레이아웃 XML 파일 구조 확인
XML 파일의 구조가 잘못되었을 수 있습니다. 부모 레이아웃이 잘못되었거나, 중복된 태그가 있을 수 있습니다. XML 파일 전체를 확인하고 올바른지 검토해 보세요.
5. 커스텀 뷰의 리소스 문제
MyView 내부에서 사용되는 리소스가 올바르게 로드되지 않을 경우 오류가 발생할 수 있습니다. 커스텀 뷰에서 attrs로 전달되는 값들이 정상인지, 필요한 리소스들이 존재하는지 확인해 보세요.
6. Logcat 확인
정확한 에러를 파악하기 위해 Logcat에서 발생하는 오류 메시지를 확인하고, 어떤 부분에서 문제가 발생하는지 파악하는 것이 중요합니다. 대표적인 오류 메시지는 다음과 같습니다.
- InflateException
- ClassNotFoundException
- NullPointerException
이러한 메시지를 기반으로 문제를 해결할 수 있습니다.
7. Android Manifest 확인
MyView를 사용하는 액티비티나 프래그먼트가 Android Manifest에 제대로 등록되어 있는지 확인하세요.
'android' 카테고리의 다른 글
안드로이드 View 다시그리기 순서 요약과 상세 그리고 트리거 메서드 (0) | 2024.08.20 |
---|---|
안드로이드 스튜디오 run 할때 Logcat 열기 (0) | 2024.05.14 |
[Android] 안드로이드 스튜디오 새 프로젝트 자바 언어 선택 방법 (0) | 2023.11.21 |
대만여행 대만날씨 필수 무료 어플 소개 (1) | 2023.05.08 |
[Korean Numbers] how to install voice data android phone (1) | 2022.09.24 |