스피너 Scrollbar Visible

오승준·2024년 5월 2일

Android_Error

목록 보기
2/2

상황


  • 안드로이드 11이전 버전들은 스피너를 클릭하면 스피너 바가 잠시 보였다가 사라져서 이 스피너에는 드롭다운 아이템들이 더 있는지를 확인할 수 있었다. 반면에 버전 11부터 스피너의 스크롤바가 스크롤을 해야지만 보여지는 상황이였다. 이로 인해서 이 스피너의 드롭다운 아이템이 더 있는지 처음 클릭했을 시에 구분이안가는 문제가 발생했다.

해결 방법


스피너의 속성에는 따로 Scollbar가없어서 isScrollbarFadingEnabled 에 접근을 하면 NullPointerException가 발생한다. 그래서 Reflection를 사용하여 listView에 접근 후 isScrollbarFadingEnabled 속성에 false를 해줘서 항상 Spinner의 scrollbar 항상 보이도록 수정했다.

override fun performClick(): Boolean {
        val superResult = super.performClick()

        try {
            val mPopupField: Field = AppCompatSpinner::class.java.getDeclaredField("mPopup")
            mPopupField.isAccessible = true
            (mPopupField.get(this) as ListPopupWindow).listView?.isScrollbarFadingEnabled = false
            mPopupField.isAccessible = false
        } catch (e: NoSuchFieldException) {
            e.printStackTrace()
        } catch (e: IllegalAccessException) {
            e.printStackTrace()
        }

        return superResult
    }

Reference


Can't make spinner's scrollbar always visible (Android)

0개의 댓글