Android官方文档翻译-Accessibility

2017-03-06  本文已影响600人  appcompat_v7

标签元素

向用户提供解释每个可互动元素的意义和目的有用且形象的标签是非常重要的。这些标签允许屏幕阅读者(比如 TalkBack )正确向用户解释每个控制器的功能。

你可以使用一下两个方法提供元素的标签:

适用于元素标签的实际属性和方法取决于元素的类型:

Accessibility 服务自动捕获 TextView 中的文字,所以你通常不需要标记这些元素

以下示例中,提供分享功能的静态 ImageButton 对象使用一个 “share” 标签:

<ImageButton
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_alignParentBottom="true"
   android:layout_alignParentLeft="true"
   android:layout_alignParentStart="true"
   android:contentDescription="@string/share"
   android:src="@drawable/ic_share" />

许多 Accessibility 服务,比如 TalkBack , BrailleBack ,在声明标签后自动声明元素类型,所以你不应改在标签中包括元素类型。

以下例子展示了如何在 Activity 中更新一个显示播放或暂停按钮的动态的 ImageView 对象:

ImageView playPauseImageView = new ImageView();
boolean mediaCurrentlyPlaying = true;
...
private void updateImageButton() {
    if (mediaCurrentlyPlaying) {
       playPauseImageView.setImageResource(R.drawable.ic_pause);

       // In res/values/strings.xml, "pause" contains a value of "Pause".
       playPauseImageView.setContentDescription(getString(R.string.pause));
    } else {
       playPauseImageView.setImageResource(R.drawable.ic_play);

       // In res/values/strings.xml, "play" contains a value of "Play".
       playPauseImageView.setContentDescription(getString(R.string.play));
    }
}

翻译到这里发现并没有什么用==以下翻译内容才是我想要的

建立一个 Accessibility Service

Manifest 声明和权限

提供 Accessibility Services 的应用必须在应用的 mainfest 文件中包括制定的声明告诉系统这是个 Accessibility Services 。

Accessibility Service 声明

为了适配 Android 4.1 及以上设备, mainfest 文件必须通过添加 BIND_ACCESSIBILITY_SERVICE 权限包含一个 Accessibility Services 的意图过滤器保证只有系统可以绑定。

 <application>
    <service android:name=".MyAccessibilityService"
        android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
        android:label="@string/accessibility_service_label">
      <intent-filter>
        <action android:name="android.accessibilityservice.AccessibilityService" />
      </intent-filter>
    </service>
  </application>

这些声明在 Android 1.6 及以上都需要。

Accessibility Service 配置

Accessibility Services 必须提供指定服务处理处理事件的类型和服务额外信息的配置。这个配置被包含在 AccessibilityServiceInfo 类中。你的服务可以在运行时通过生成实例类并使用 setServiceInfo() 配置信息。但是不是所有的配置选项都可以通过这个方法配置。

Android 4.0 开始,你可以个通过 <meta-data> 元素引用一个可以设置服务全部选项的配置文件:

<service android:name=".MyAccessibilityService">
  ...
  <meta-data
    android:name="android.accessibilityservice"
    android:resource="@xml/accessibility_service_config" />
</service>

xml :

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:description="@string/accessibility_service_description"
    android:packageNames="com.example.android.apis"
    android:accessibilityEventTypes="typeAllMask"
    android:accessibilityFlags="flagDefault"
    android:accessibilityFeedbackType="feedbackSpoken"
    android:notificationTimeout="100"
    android:canRetrieveWindowContent="true"
    android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity"
/>

注册 Accessibility 事件

服务配置参数一个最重要的功能就是制定你的服务可以处理何种事件。制定服务信息可以是服务相互合作,并允许开发者灵活的制定应用和事件类型:

Accessibility Services 方法

获取事件细节

为用户采取操作

监听手势

在Android 4.1 以后可以监听指定手势。这个特性需要设置 AccessibilityServiceInfo 的flags 为 FLAG_REQUEST_TOUCH_EXPLORATION_MODE:

public class MyAccessibilityService extends AccessibilityService {
    @Override
    public void onCreate() {
        getServiceInfo().flags = AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE;
    }
    ...
}

使用可访问行动

public class MyAccessibilityService extends AccessibilityService {

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        // get the source node of the event
        AccessibilityNodeInfo nodeInfo = event.getSource();

        // Use the event and node information to determine
        // what action to take

        // take action on behalf of the user
        nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);

        // recycle the nodeInfo object
        nodeInfo.recycle();
    }
    ...
}

performAction() 方法允许你在应用中采取行动。如果需要采取一个全局行动,比如返回值 Home 屏,按下返回按钮,打开通知屏或最近应用列表,使用 performGlobalAction() 方法。

使用焦点类型

上一篇 下一篇

猜你喜欢

热点阅读