Android无障碍:通过Java设置contentDescription (GridView item)

由于现在使用智能设备的人越来越多,需求也越来越多样化。根据统计,目前我国有1700多万视障人士,意味着平均每81人中就有一位视障人士可能会在使用互联网服务时遇到困难。Android的无障碍设计就是针对视觉障碍人士,如果用户在设备的辅助功能中开启无障碍服务——比如 TalkBack,它就能够读取屏幕上的文本信息并将其转化为语音提示以达到无障碍。

但是 Image 之类的图形是无法像文本一样的被朗读出来的,所以我们需要为图片添加 contentDescription
,使图片具有可读性。

最简单的方法:直接在xml中声明

ImageView
为例,对于普通的控件我们可以直接在 xml
中定义其 contentDescription
属性

<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
中直接定义,但是在一些特殊的组件上就不行了。比如笔者最近遇到的一个需求:需要给 GridView
item
里的图片添加 contentDescription
item
使用自定义的 ImageView + TextView
布局)

如果直接在 xml
文件中定义 contentDescription
属性,那所有 item
的图片描述都是同一个值,无法发挥其真正的作用,所以我们必须在适配器( Adapter
)中,定义每一个 item
里的图片描述。

设置 contentDescription
的语法

imageView.setContentDescription("String");

我在 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;
}
复制代码

原文 

https://juejin.im/post/5c87a239e51d453c8f487a5b

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Android无障碍:通过Java设置contentDescription (GridView item)

分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址