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;
}
复制代码
相关文章
相关标签/搜索