从零开始--系统深入学习android(理论-开发前准备-10.一个好的应用应该具备哪些方面-10.1易于访问)保留
2012-10-15 12:35
966 查看
10.1 易于访问
许多Android用户有残疾,需要给他们提供不同的方式来与Android设备进行交互。android提供了一个accessibility层,帮助用户更容易的浏览android设备,这又是让你软件更强大的一个细节方面,让我们好好学习吧
10.1.1 允许用一个定向控制器导航
许多android 设备都具备某种定向控制器,如:一个用户能在任何方向移动的轨迹球。
一个允许用户在四个方向导航的d-pad。
一个类似箭头的按键和OK按钮,相当于点击一个轨迹球或d-pad 。
通过操作这些控制器,用户可以不同使用触摸屏也能导航到其他界面。关于不使用触摸屏而控制导航的方法,最好引入焦点概念。
Android提供了几个API,让你控制一个部件是否有焦点,甚至要求一个widget 获得焦点。这些方法包括:
setFocusable()
isFocusable()
requestFocus()
这是代码中的方法,如果在xml布局文件中,我们可以使用
android:focusable为"true"
10.1.1.1 控制焦点顺序
当用户想要使用定向控制时,焦点从一个View传递到另一个View,它由焦点的顺序决定。这个焦点运转的顺序是基于一个规则的,这个规则就是它会根据一个特定的方向找最近的邻居。有时候你可能不想要使用默认的焦点传递顺序,你想自己定义。下面就让我们看看XML中有哪些方法定于焦点顺序(下面方法如字面意思就不详述了)android:nextFocusDown
android:nextFocusLeft
android:nextFocusRight
android:nextFocusUp
例如,下面有一个Xml布局文件,TextView上包含一个焦点。当TextView位于EditText的右边,这样你按下down arrow 就能吧焦点传递到EditText:
<LinearLayout android:orientation="horizontal" ... > <EditText android:id="@+id/edit" android:nextFocusDown=”@+id/text” ... /> <TextView android:id="@+id/text" android:focusable=”true” android:text="Hello, I am a focusable TextView" android:nextFocusUp=”@id/edit” ... /> </LinearLayout>
当然我们还可以在运行时修改焦点顺序,例如使用View类的
setNextFocusDownId()
和setNextFocusRightId().
10.1.1.2 用一个定向控制器点击
在大多数设备中,使用定向控制器点击一个View会发送一个KeyEvent,并且键码为KEYCODE_DPAD_CENTER到当前获得焦点的View中。当你在触摸屏上触摸View时确保这个事件是一样的效
果。所有标准android View会提前适当的处理
KEYCODE_DPAD_CENTER。如果可能的话,建议吧
KEYCODE_ENTER
和KEYCODE_DPAD_CENTER看成一致的。
10.1.2 在你的输入部件设置一个标签
许多输入widgets会有一个提示,让用户知道这个是用来输入什么的。例如 一个记事本App可能使用带“+”号的图片来提示用户点击它来添加一个新的记录。或者一个EditText附近有一个View,来提示它的用途。当然对于视力有问题的用户,这种提示是没什么用的。关于这种输入部件,要提供文本提示信息的话,你可以使用
android:contentDescription属性。或者使用障碍
语音工具,吧这个属性的描述朗读给用户很多View中都有这个
android:contentDescription到时候用的时候在查即可,下面是一个ImageButton使用这个属性的例子。
<ImageButton android:id=”@+id/add_entry_button” android:src=”@drawable/plus” android:contentDescription=”Add note”/>
10.1.3 从自定义组件发送Accessibility Events
如果您的应用程序,您需要创建一个自定义的视图组件,你可能需要做一些额外的工作,以确保您的View是可访问。具体来说,你应该确保你的View实现AccessibilityEventSource接口并在
适当的时间发送
AccessibilityEvent,因为每个AccessibilityEvent包含关于View状态的重要信息。
在用户界面上,当有重要的事件发生就发送一个事件。目前有五种访问事件,View应该发送此事件到系统用来与用户交互:
TYPE_VIEW_CLICKED表明用户点击一个View(例如,用户选择一个按钮)
TYPE_VIEW_LONG_CLICKED表明用户正在对一个View长按
TYPE_VIEW_SELECTED表明用户在view中选择一个item。通常适用于一个
AdapterView中
TYPE_VIEW_FOCUSED表明用户移动焦点到view
TYPE_VIEW_TEXT_CHANGED表明View的文本或内容被改变了
基本的View类实现了
AccessibilityEventSource并在适当的时候发送这些事件。你自定义的View应该继承Android中的View类。
根据我们自定义View的特性,我们可以使用
sendAccessibilityEvent()来发送特定的事件
例如,假设你自定义一个滑块允许用户按向左或向右选择一个数值。这时每当滑块值的变化,就发出一个TYPE_VIEW_TEXT_CHANGED类型的事件:
@Override public boolean onKeyUp (int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) { mCurrentValue--; sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED); return true; } ... }
每个AccessibilityEvent有一组所需的属性描述当前状态的View。这些属性包括像View的类名,文本和选中状态。每个事件类型所需要的具体属性描述在AccessibilityEvent文件。
View中还有一个dispatchPopulateAccessibilityEvent()方法,当AccessibilityEvent被发送前用来改变AccessibilityEvent对象。
以上面的滑块为例,View应该增加滑块的当前值的事件文本:
@Override public boolean dispatchPopulateAccessibilityEvent(final AccessibilityEvent event) { super.dispatchPopulateAccessibilityEvent(event); if (!isShown()) { return false; } CharSequence text = String.valueOf(mCurrentValue); if (text.length() > AccessibilityEvent.MAX_TEXT_LENGTH) { text = text.subSequence(0, AccessiblityEvent.MAX_TEXT_LENGTH); } event.getText().add(text); return true; }
相关文章推荐
- 从零开始--系统深入学习android(理论-开发前准备-10.一个好的应用应该具备哪些方面-10.1易于访问)保留
- 从零开始--系统深入学习android(理论-开发前准备-10.一个好的应用应该具备哪些方面-10.1易于访问)保留
- 从零开始--系统深入学习android(理论--开发前准备--开发入门--DDMS调试)
- Android开发人员必须掌握的10 个开发工具+应该深入学习的10个开源应用项目
- Android开发者应该深入学习的10个开源应用项目
- Android开发者应该深入学习的10个开源应用项目
- 从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-4.Intents和Intent Filters)
- 从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-7.App Widgets)
- 请教一个问题,Android应用运行时在调用某个API(比如相机)时,系统如何判断这个应用是否具备相应的权限?
- Android开发者应该深入学习的10个开源应用项目
- Android开发者应该深入学习的10个开源应用项目
- Android开发者应该深入学习的10个开源应用项目
- 从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-3. 菜单)
- Android开发者应该深入学习的10个开源应用项目
- 10、结合本阶段学习的知识,你认为写出优美的程序应该注意哪些方面?
- Android开发者应该深入学习的10个开源应用项目[转]
- Android开发者应该深入学习的10个开源应用项目(转)
- Android开发者应该深入学习的10个开源应用项目
- 从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-7.通知)
- 准备系统学习手机应用开发