微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android TalkBack:当出现配置了间隔的 TimePicker 时,如何更改 TalkBack 朗读的内容?

如何解决Android TalkBack:当出现配置了间隔的 TimePicker 时,如何更改 TalkBack 朗读的内容?

首先,我单击一个按钮,显示一个 DialogFragment,其中包含一个带有 TimePicker 的 LinearLayout,处于微调模式,间隔为 15 分钟:

public void setIntervals() {
        int numValues = 60 / interval;
        String[] displayedValues = new String[numValues];
        for (int i = 0; i < numValues; i++) {
            displayedValues[i] = FORMATTER.format(i * interval);
        }

        View minute = timePicker.findViewById(Resources.getSystem().getIdentifier("minute","id","android"));
        if ((minute != null) && (minute instanceof NumberPicker)) {
            minutePicker = (NumberPicker) minute;
            minutePicker.setMinValue(0);
            minutePicker.setMaxValue(numValues - 1);
            minutePicker.setdisplayedValues(displayedValues);
        }
    }

当我激活 TalkBack 并打开对话框时,TalkBack 会读取例如“10:1”而不是“10:15”。每次我更改分钟值时都会出现同样的问题。我通过将 AccesibilityDelegate 分配给 TimePicker 的微小更改解决了这个问题。但是对话框打开时问题依旧。

public class TimePickerAccesibilityDelegate extends AccessibilityDelegateCompat {

        public int hour;
        public int minute;
        public boolean timeChanged = false;

        @Override
        public void onInitializeAccessibilityEvent(View host,AccessibilityEvent event) {
            super.onInitializeAccessibilityEvent(host,event);
            updateEventContentDescription(event);
        }

        public void setTimeChanged(boolean isChanged) {
            timeChanged = isChanged;
        }

        public void updateEventContentDescription(AccessibilityEvent event){
            ArrayList<Integer> eventTypes;
            eventTypes = new ArrayList<>(Arrays.asList(AccessibilityEvent.TYPE_VIEW_SELECTED,AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED,AccessibilityEvent.TYPE_ANNOUNCEMENT,AccessibilityEvent.TYPE_VIEW_FOCUSED));
            if ((timeChanged) && eventTypes.contains(event.getEventType())) {
                event.setContentDescription(hour + ":" + FORMATTER.format(minute));
                setTimeChanged(false);

            }
        }

    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。