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)
}
})
}
답글 남기기
댓글을 달기 위해서는 로그인해야합니다.