[카테고리:] 안드로이드

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

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