안드로이드 레거시 뷰 커스텀 액션 메서드

    data class CustomAction(
        val actionId: Int,
        val getActionName: () -> String,  // 동적으로 액션 이름을 반환하는 함수
        val actionHandler: () -> Unit
    )

    fun setCustomAction(view: View, vararg actions: CustomAction) {
        ViewCompat.setAccessibilityDelegate(view, object : AccessibilityDelegateCompat() {
            override fun onInitializeAccessibilityNodeInfo(host: View, info: AccessibilityNodeInfoCompat) {
                super.onInitializeAccessibilityNodeInfo(host, info)
                for (action in actions) {
                    // 현재 상태에 따른 액션 이름을 가져옵니다
                    val currentActionName = action.getActionName()
                    info.addAction(AccessibilityNodeInfoCompat.AccessibilityActionCompat(action.actionId, currentActionName))
                }
            }

            override fun performAccessibilityAction(host: View, actionId: Int, args: Bundle?): Boolean {
                for (action in actions) {
                    if (action.actionId == actionId) {
                        action.actionHandler.invoke()
                        // 액션 실행 후 accessibility 정보를 갱신합니다
                        host.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED)
                        return true
                    }
                }
                return super.performAccessibilityAction(host, actionId, args)
            }
        })
    }

Comments

답글 남기기