因爲如今使用智能設備的人愈來愈多,需求也愈來愈多樣化。根據統計,目前我國有1700多萬視障人士,意味着平均每81人中就有一位視障人士可能會在使用互聯網服務時遇到困難。Android的無障礙設計就是針對視覺障礙人士,若是用戶在設備的輔助功能中開啓無障礙服務——好比 TalkBack,它就可以讀取屏幕上的文本信息並將其轉化爲語音提示以達到無障礙。
可是 Image 之類的圖形是沒法像文本同樣的被朗讀出來的,因此咱們須要爲圖片添加 contentDescription
,使圖片具備可讀性。java
以 ImageView
爲例,對於普通的控件咱們能夠直接在 xml
中定義其 contentDescription
屬性android
<ImageView android:id="@+id/image" android:layout_width="@dimen/image_size" android:layout_height="@dimen/image_size" android:src="@drawable/im_image" android:contentDescription="@string/grid_image" /> <!--直接定義-->
複製代碼
對於普通的控件,咱們能夠在 xml
中直接定義,可是在一些特殊的組件上就不行了。好比筆者最近遇到的一個需求:須要給 GridView
的 item
裏的圖片添加 contentDescription
(item
使用自定義的 ImageView + TextView
佈局)
若是直接在 xml
文件中定義 contentDescription
屬性,那全部 item
的圖片描述都是同一個值,沒法發揮其真正的做用,因此咱們必須在適配器(Adapter
)中,定義每個 item
裏的圖片描述。數組
設置 contentDescription
的語法
imageView.setContentDescription("String");
ide
我在GridAdapter.java
中定義 contentDescription
的完整 getView()
代碼佈局
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null ) {
// 加載子佈局
convertView = LayoutInflater.from(mContext).inflate(R.layout.gridview_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.imageView = convertView.findViewById(R.id.gridImage);
viewHolder.textView = convertView.findViewById(R.id.gridText);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
// gridDataList 是我存放GridView的item信息的數組
viewHolder.imageView.setImageResource(gridDataList.get(position).getIconId());
// 下面這行就是定義 contentDescription ↓↓↓↓↓
viewHolder.imageView.setContentDescription(gridDataList.get(position).getName());
viewHolder.textView.setText(gridDataList.get(position).getName());
return convertView;
}
private class ViewHolder {
ImageView imageView;
TextView textView;
}
複製代碼