android 官方說明文檔,Android官方文檔翻譯-Accessibility

標簽元素

向用戶提供解釋每個可互動元素的意義和目的有用且形象的標簽是非常重要的。這些標簽允許屏幕閱讀者(比如 TalkBack )正確向用戶解釋每個控制器的功能。

你可以使用一下兩個方法提供元素的標簽:

當展示在 Activity 的整個生命周期中都不會改變樣式的靜態元素時,在 layout 資源文件中添加一個 xml 元素。

當展示在 Activity 生命周期中會改變樣式的動態元素時,在改變元素樣式的動態邏輯中設置元素標簽。

適用于元素標簽的實際屬性和方法取決于元素的類型:

圖形元素,比如 ImageView , ImageButton ,使用 android:contentDescription XML 屬性設置靜態元素 或 setContentDescription() 方法設置動態元素。

對于簡單裝飾的圖形元素,設置各自的 android:contentDescription XML 屬性為 “@null”。如果你的應用只支持 Android 4.1 及以上的設備,你可以設置 Android:isImportantForAccessibility XML 元素為 “no”。

可編輯元素,比如 EditText , 使用hint XML屬性設置靜態元素或 setHint() 方法設置動態屬性。

如果你的應用在 Android 4.2 及以上的設備上安裝,對于充當正文標簽的 View 對象,使用 android:labelFor 屬性。

Accessibility 服務自動捕獲 TextView 中的文字,所以你通常不需要標記這些元素

以下示例中,提供分享功能的靜態 ImageButton 對象使用一個 “share” 標簽:

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 的意圖過濾器保證只有系統可以綁定。

android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"

android:label="@string/accessibility_service_label">

這些聲明在 Android 1.6 及以上都需要。

Accessibility Service 配置

Accessibility Services 必須提供指定服務處理處理事件的類型和服務額外信息的配置。這個配置被包含在 AccessibilityServiceInfo 類中。你的服務可以在運行時通過生成實例類并使用 setServiceInfo() 配置信息。但是不是所有的配置選項都可以通過這個方法配置。

Android 4.0 開始,你可以個通過 元素引用一個可以設置服務全部選項的配置文件:

...

android:name="android.accessibilityservice"

android:resource="@xml/accessibility_service_config" />

xml :

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 事件

服務配置參數一個最重要的功能就是制定你的服務可以處理何種事件。制定服務信息可以是服務相互合作,并允許開發者靈活的制定應用和事件類型:

包名: 指定服務想要處理的應用包名。如果這個參數被省略,你的服務將被認為處理所有應用的事件。這個參數可以通過配置文件的 android:packageNames 設置以逗號分隔的列表,或者使用 AccessibilityServiceInfo.packagenames 設置。

事件類型:指定服務處理事件的類型。這個參數可以通過配置文件中的 android:accessibilityEventTypes 設置以 | 為分隔的list ,或者使用 AccessibilityServiceInfo.eventTypes 設置。

Accessibility Services 方法

onServiceConnected() - (可選) 當系統連接服務成功時回調。使用這個方法完成服務的一次性操作,包括連接用戶反饋系統服務,比如音頻管理器或者震動器。如果你想在運行時修改服務配置或者進行調整,在這個地方使用 serServiceInfo() 方法。

onAccessibilityEvent() -(必選)當服務檢測到一個 Accessibility 事件滿足了之前你設置的服務類型,系統將會回調此方法。比如,當用戶點擊一個按鈕或者聚焦在 UI 界面時。當這發生時,系統調用這個方法,通過 AccessibilityEvent() 向用戶提供反饋。這個方法在整個生命周期中可以被多次調用。

onInterrupt() -(必選) 當系統想要中斷服務提供的反饋,通常時作為用戶的操作的回應比如移動焦點時調用這個方法。這個方法將在生命周期期間多次調用。

onUnbind() - (可選) 系統將要關閉服務時調用方法。使用這個方法做一些關閉程序,包括釋放用戶反饋系統服務,比如音頻管理器或者振動器。

獲取事件細節

AccessibilityEvent.getRecordCount() and getRecord(int) - 這些方法允許你取回 AccessibilityRecord 對象的 set 列表。

AccessibilityEvent.getSource() - 這個方法返回一個 AccessibilityNodeInfo 對象。這個對象可以獲得 View 的布局層次(父布局和子布局)。因此,服務必須通過在配置 XML 文件中添加 canRetrieveWindowContent 屬性為 true 來獲取權限。否則調用失敗。

為用戶采取操作

監聽手勢

在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() 方法。

使用焦點類型

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260028.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260028.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260028.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

USACO 2.4.1 The Tamworth Two

牛和農夫按照固定的走法在10x10的地圖中走,每分鐘走一步,求經過幾分鐘相遇。永遠不能相遇輸出0. 純模擬的題。 判斷永遠不能相遇的方法是如果遇到了一個先前的狀態,那么肯定存在循環,必定不能相遇。 程序中把狀態表示為牛和農夫的…

013,spring boot下JedisCluster客戶端的配置,連接Redis集群

2019獨角獸企業重金招聘Python工程師標準>>> 1&#xff0c;pom依賴添加&#xff1a; <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <type>jar</typ…

android控件使用大全,Android常見控件使用詳解

本文實例為大家分享了六種Android常見控件的使用方法&#xff0c;供大家參考&#xff0c;具體內容如下1、TextView 主要用于界面上顯示一段文本信息2、Button 用于和用戶交互的一個按鈕控件//為Button點擊事件注冊一個監聽器public class Click extends Activity{private Butto…

Ubuntu 12.10使用apt安裝Oracle/Sun JDK

Ubuntu 12.10使用apt安裝Oracle/Sun JDK apt-get install python-software-properties sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java6-installerposted on 2014-09-05 13:30 fastdream 閱讀(...) 評論(...) 編輯 收藏 …

Afterthought 原來是這樣的啊。。。。

$(ProjectDir)Libs\Afterthought\Afterthought.Amender.exe "$(TargetPath)" "$(TargetDir)EntityFramework.Patterns.dll" 我實際上分析代碼好久&#xff0c;也沒整明白它是怎么運行的&#xff0c;看一下官方文檔明白了&#xff0c;原來。。。 Next, add …

查詢

增加文本1. create database test刪除文本2. drop database test3. create table info( code int primary key, name varchar(20) not null)auto_increment 自增長列foreign key(列名) references 主表名(列名) 外鍵關系4. drop table infoCRUD:增加語法1.insert into 表…

android 監聽界面變化,Android之頁面有變化用onWindowFocusChanged來監聽權限是否開啟...

1 問題我們需要在Activity里面監聽網絡變化、熱點是否開啟和關閉、GPS服務是否開啟、位置權限是否開啟等一些列行為。2 思路方法一&#xff1a;如果是需要啟動activity進行權限申請&#xff0c;我們可以用如下組合模式var intent Intent(Settings.ACTION_LOCATION_SOURCE_SETT…

逐步優化求解最大子序列和

求解最大子序列和 tag&#xff1a; 數據結構與算法 最大子序列和問題&#xff1a; 給定序列A1, A2&#xff0c;... AN&#xff0c; 求最大的子序列和。 例如 &#xff1a;   對于序列4, -3, 5, -2, -1, 2, 6, -2&#xff0c; 最大序列和為11&#xff08;4 -3 5 - 2 - 1 2 …

POJ 1228 —— “穩定”凸包

POJ 1228 Grandpas Estate 這是個好題目&#xff0c;同時也是個不和諧的題目&#xff08;不和諧原因是題目出的存在漏洞&#xff0c;數據弱&#xff0c;而且有些條件沒給清楚&#xff0c;為了一個SB錯誤無限WA之后&#xff0c;終于AC&#xff09; 題意就廢了我好長時間&#xf…

pythonflaskmock數據_Flask實現簡單Mock Server

Mock Server充當的角色&#xff1a;Mock server在實際項目中的意義就相當于數據庫。將我想要的數據返回給我就行&#xff0c;我并不關心你怎么邏輯處理的。一般的應用程序請求方式是GET和POST。Flask自帶的request使用:request.url獲取當前的請求url全路徑地址&#xff0c;requ…

在Application_Error事件中獲取當前的Action和Control

ASP.NET MVC程序處理異常時&#xff0c;方法有很多&#xff0c;網上也有列舉了6種&#xff0c;下面是使用全局處理在Global.asax文件的Application_Error事件中實現。既然是ASP.NET MVC,我需要捕捉到Controller和Action名稱。怎樣實現可以參考下面代碼&#xff1a; 程序運行結果…

android 真機 sqlite3,在android真機上使用sqlite3

#zijun#2013.10.29#QQ:223663737在android真機上使用sqlite3前期準備:1:保證手機已經ROOT操作步驟:1 : 打開CMD2 : 進入android linuxadb shell3 :切換到root權限su - root4 : 修改system目錄為可讀寫權限mount -oremount,rw -t yaffs2 /dev/block/mtdblock3 /system5 :拷貝文件…

【ORACLE技術嘉年華PPT】MySQL壓力測試經驗

這是2013.11.18在第三屆ORACLE技術嘉年華上的主題演講PPT。點擊這里&#xff1a;本地下載PPT。--------------------------------------分割線--------------------------------------知數堂 &#xff08;http://zhishuedu.com&#xff09;培訓是由資深MySQL專家葉金榮、吳炳錫…

EditText 空指針問題

今天在Android中碰到了這樣一個問題&#xff0c;其實應該很少人會碰到&#xff0c;因為只有像我這種奇葩才會犯這種錯誤。 但既然解決了&#xff0c;我就想在這里跟大家分享一下&#xff0c;畢竟它困擾了我一個白天啊。。。不多說了&#xff0c;看下面。。。 其實問題很簡單&am…

ios跨線程通知_iOS多線程開發(三)---Run Loop(一)

Run LoopRun Loop就是一個事件處理的循環&#xff0c;用來不停的調動工作以及處理輸入事件。使用Run Loop的目的就是節省CPU效率&#xff0c;線程在有工作的時候忙于工作&#xff0c;而沒工作的時候處于休眠狀態。一&#xff0c;Run Loop剖析Structure of a Run Loop and its s…

android播放flv,Android:從url播放flv視頻流

我目前有一個應用程序&#xff0c;它可以記錄視頻并將其上傳到我的服務器。在上傳視頻之后&#xff0c;應用程序會獲得一個響應&#xff0c;該響應包含指向該文件的flv流的URL。Android&#xff1a;從url播放flv視頻流當我嘗試在android默認視頻播放器(視頻)中打開流時什么也沒…

1.關于瀏覽器

一、認識主流瀏覽器 Chrome谷歌瀏覽器Safari蘋果瀏覽器Firefox火狐瀏覽器Opera歐朋瀏覽器 二、瀏覽器內核是什么&#xff1f; 三、五大瀏覽器&#xff0c;四大內核 四、前端做網頁開發用什么瀏覽器&#xff1f; Chrome谷歌瀏覽器。

About me [my way]

就要除夕了。假日的到來&#xff0c;心情瞬間就閑適了下來。早早上了床&#xff0c;看看電腦還有30%的電&#xff0c;想到一些事情&#xff0c;順帶紀錄一下吧。 今年堅持上班到了除夕的前一天&#xff0c;爸媽來工作的城市陪我過年了。感謝他們。前幾天就已經看帖子有說仍在上…

明天要中秋節了,先來到簡單“類”的題目

2-1 Point類的定義 Time Limit: 1000MS Memory limit: 65536K 題目描述 通過本題目的練習可以掌握類與對象的定義&#xff1b; 設計一個點類Time&#xff0c;它具有私有數據成員x(橫坐標)、y(縱坐標)&#xff1b;公有成員函數&#xff1a;SetPoint(int,int)用于設置點對象的值&…

實時數據交換平臺 - BottledWater-pg with confluent

標簽 PostgreSQL , Bottled Water , Kafka , Confluent , IoT 背景 想必大家都在圖書館借過書&#xff0c;小時候有好看的書也會在小伙伴之間傳閱。 借書和數據泵有點類似&#xff0c;一份數據通過數據泵實時的分享給訂閱者。 例如在IoT的場景中&#xff0c;有流式分析的需求&a…