即使在editText具有焦点时,也可以使用对话框来说明微调器内容描述

时间:2015-08-26 18:01:01

标签: android accessibility talkback

我有一个布局, 有一个表单..表单中有大约五个项目是一个微调器,每次我的活动加载Talkback似乎都会读取这个微调内容描述,即使焦点和闪烁光标位于第一个edittext视图上。

我似乎无法阻止它......任何想法?

2 个答案:

答案 0 :(得分:1)

辅助功能焦点和输入焦点在Android中单独跟踪。我需要有关您的具体方案的更多详细信息,以提供100%的答案。但是,我的猜测是,当视图加载时,您的EditText字段正在请求输入焦点,因此光标将被移动到那里,并且可能会弹出键盘(取决于Android版本)。但是,由于制表符排序或其他一些机制,微调器是页面上第一个获得辅助功能焦点的项目。

根据您想要的行为,有两种解决方案。

解决方案1(推荐):没有EditText框请求输入焦点。允许用户在交互时强制将输入焦点放入框中。对于有能力的用户,只需轻点一下EditText框即可。

解决方案2(较少的accessibile,但可能更有用):将可访问性焦点转移到onResume方法(或onCreate,或您认为最合适的任何位置)的EditText。像这样的方法是最好的:

public void resetFocus() {        
    editTextControl.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
    editTextControl.requestFocus();
}

我建议在onResume中调用上面的方法,这样每次这个特定的视图加载输入和可访问性焦点都会在一个可预测的位置。否则,您已经创建了其他辅助功能问题。

答案 1 :(得分:0)

我是这样解决的:

/*
This custom Spinner has the purpose of making sure that there are no accessibility events fired after
a selection is made 
*/

public class SilentSpinner<T> extends SimpleSpinner<T> {

   //region constructors
     ...
   //endregion

   //region public methods
   @Override
   public void sendAccessibilityEvent(int eventType) {
       if (eventType != AccessibilityEvent.TYPE_VIEW_SELECTED) {
           super.sendAccessibilityEvent(eventType);
       }
   }
   //endregion
}