Android無障礙:經過Java設置contentDescription (GridView item)

爲何要設置 contentDescription

因爲如今使用智能設備的人愈來愈多,需求也愈來愈多樣化。根據統計,目前我國有1700多萬視障人士,意味着平均每81人中就有一位視障人士可能會在使用互聯網服務時遇到困難。Android的無障礙設計就是針對視覺障礙人士,若是用戶在設備的輔助功能中開啓無障礙服務——好比 TalkBack,它就可以讀取屏幕上的文本信息並將其轉化爲語音提示以達到無障礙。
可是 Image 之類的圖形是沒法像文本同樣的被朗讀出來的,因此咱們須要爲圖片添加 contentDescription,使圖片具備可讀性。java

最簡單的方法:直接在xml中聲明

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" />  <!--直接定義-->
複製代碼

使用Java設置

對於普通的控件,咱們能夠在 xml 中直接定義,可是在一些特殊的組件上就不行了。好比筆者最近遇到的一個需求:須要給 GridViewitem 裏的圖片添加 contentDescriptionitem 使用自定義的 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;
}
複製代碼
相關文章
相關標籤/搜索