当前位置: 首页 > 知识库问答 >
问题:

Android通过点击ActionBar按钮触发自定义可访问性事件

施雅懿
2023-03-14

我正在尝试使用AccessibilityManager和TalkBack触发自定义AccessibilityEvent

该事件的用例是,当用户单击操作栏时,片段会轮询对象列表,然后根据列表的大小调整其 AccessibilityEvent 内容。

当我尝试运行它时,我没有收到预期的Talkback消息。我很确定我在实例化AccessibilityEvent时错过了一些基本的东西。

我也不确定我是否需要使用,或者如何在这里应用AccessibilityServers,因为回调来自MenuItem而不是View。我知道我可以调用findViewById来获取此MenuItem的视图,但我对这些API不是很了解。

关于这两点的任何指导都是非常好的!

所讨论的问题基本上由以下伪代码描述:

public class MyFragment extends Fragment {

//...

private List<Pojo> mPojoList;

//...

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == R.id.the_id_for_my_menuitem) {
        if (booleanCheck() && !mPojoList.isEmpty()) {

            //create the Accessibility event
            final AccessibilityEvent event = AccessibilityEvent.obtain(AccessibilityEvent.TYPE_VIEW_CLICKED);
            event.setContentDescription(String.format("deleting %2d pojos", mPojoList.size()));

            //Send a custom accessibility event to let the user know that we're deleting X objects.
            final AccessibilityManager mgr = (AccessibilityManager) this.getActivity().getSystemService(Context.ACCESSIBILITY_SERVICE);

            //PROBLEM: We're not seeing this event come through in TalkBack.
            mgr.sendAccessibilityEvent(event);

            //Delete the objects.
            myDeleteObjectsFunction();
        }
    }
}}

共有2个答案

尉迟跃
2023-03-14

虽然这是一个老问题,但我将公布我的答案,因为之前给出的答案对我不起作用。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == R.id.the_id_for_my_menuitem) {
        if (booleanCheck() && !mPojoList.isEmpty()) {

            AccessibilityManager manager = (AccessibilityManager)this.getSystemService(Context.ACCESSIBILITY_SERVICE);
            if(manager.isEnabled()){
                AccessibilityEvent event = AccessibilityEvent.obtain();
                event.setEventType(AccessibilityEvent.TYPE_ANNOUNCEMENT);
                event.setClassName(getClass().getName());
                event.getText().add(*yourString*);

                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
                    event.setSource(findViewById(*yourButton*));
                }
                manager.sendAccessibilityEvent(event);
            }
        }
    }
}
洪哲彦
2023-03-14

尝试使用 View 对象触发辅助功能事件。

AccessibilityEvent event = AccessibilityEvent.obtain(AccessibilityEvent.TYPE_VIEW_CLICKED);
event.setContentDescription(String.format("deleting %2d pojos", mPojoList.size()));

View view = getActivity().findViewById(R.id.child_view);

ViewParent parent = view.getParent();
if (parent != null) {
  parent.requestSendAccessibilityEvent(view, event);
}
 类似资料:
  • 在我的应用程序中,我有一个通知要显示。 比方说,当显示通知时,我想按“是”进入活动并隐藏通知,按“否”什么都不做只是隐藏通知。 我尝试了这段代码,但是onclick不是onclckpendingent,我不能做任何我想做的事情。 我怎么能这样做?

  • 问题内容: 似乎是一个简单的问题,但解决其他问题的方法似乎对我没有用。 试图通过单击按钮来触发AJAX请求,但似乎并未触发。 HTML示例 javascript 问题答案: 您拥有的代码在拨弄中工作得很好。初始页面加载后,按钮是否通过AJAX动态呈现? 用 代替

  • 本文向大家介绍Android 自定义Button控件实现按钮点击变色,包括了Android 自定义Button控件实现按钮点击变色的使用技巧和注意事项,需要的朋友参考一下 效果图如下所示: 一、shape 样式:(在drawable新建--》new--》Drawable resource file 在父级标签selector添加Item ) 二、style 样式: 三、Button控件调用styl

  • > 标高,同时具有自定义可绘制。 在用户触摸的地方启动涟漪效果。

  • 问题内容: 这是我想做的事情:单击页面上的一个按钮,这又使(2)事情发生: 显示一个ModalPopup,以防止用户按下任何按钮或更改值 在方法后面调用我的代码,完成后隐藏ModalPopup 这是ASP标记: 现在,这是我在C#代码后面的代码: 为什么不起作用?ModalPopup可以完美显示,但是btnSaveData_Click事件从不触发。 更新: 第一个建议对我不起作用。我还尝试了您的第

  • 当按钮单击时,是否有任何机制显式地触发按键事件。当我单击java UI中命名为“+”的按钮时,它将显式地触发“+”键按下事件。