WebView 및 JvmOverloads
@JvmOverloads 및 이로 인한 문제
안드로이드로 커스텀뷰를 만들려면 여러 구조기를 설치해야 하지만, 코틀린을 사용하면
@JvmOverloads
모조를 통해 쉽게 만들 수 있다.class MyCustomView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : WebView(context, attrs, defStyleAttr)
이렇게 기술하면 attrs
와defStyleAttr
가 없는 상황에서도 과부하 구조기가 생성된다.기본적으로 별 문제는 없지만 일부 뷰는 기대하는 행동을 하지 않을 수도 있다.그중 하나는 Kottlin에서 custom view를 설치할 때 고려할 사항 - Qita에 적힌 것처럼 EditText입니다.
defStyleAttr
를 0으로 초기화하면 Context와 AttributeSet의 구조기가 지정한 기본 스타일을 받아들일 수 없고 의도적인 동작이 되지 않습니다.이런 뷰는 존재한다. 좀 오래된 기사Y.A.M의 다큐멘터리: Android Stail 노트지만 일람표가 나온다.이런 뷰를 만났을 때 실제로 어떻게 조사했는지 비망록입니다.
원인을 조사하다
이번에 내가 만났던 View는 웹뷰인데
@JvmOverloads
에 따라 기본 스타일이 적용되지 않으면 표시된 웹 페이지의 텍스트 상자를 눌러도 키보드가 표시되지 않는다.공식은 아니지만 뜻이 있는 사람이 공개했다Android 소스 코드 검색 서비스 - Developer Collaboration Project.
public WebView(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.webViewStyle);
}
웹뷰에서 위에서 정의한 바와 같이 임의의 Andoid 버전의 원본 코드webViewStyle
와 같은 키워드로 검색을 시도하면 뭔가Widget.WebView
가 영향을 미치는 것 같기 때문이다.진일보
Widget.WebView
검색 후 다음과 같은 코드를 발견하였다.Theme에 지정focusable
됐는데 설정하지 않아 키보드가 작동합니다.<style name="Widget.WebView">
<item name="focusable">true</item>
<item name="focusableInTouchMode">true</item>
<item name="scrollbars">horizontal|vertical</item>
</style>
상응하는 곳 문제 발생 View 처리
실제로 이런 View에 어떻게 접근하는지를 감안하면 3개 파라미터(또는 4개 파라미터)의 구조기를 사용할 기회가 없을 것이기 때문에 2개 파라미터
@JvmOverloads
를 사용하는 것이 가장 쉽다.거기서 문제가 생겼을 때 여러 구조기를 재생성하는 형식도 문제 없겠죠.참고 자료
Reference
이 문제에 관하여(WebView 및 JvmOverloads), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/pps5/articles/webview_and_jvmoverloads텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)