我正在尝试更新Android的示例代码“API Demos”应用程序,以便默认活动列表中的TextView项目具有辅助功能所需的“内容描述”。这是该活动中列表的初始化情况:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
String path = intent.getStringExtra("com.example.android.apis.Path");
if (path == null) {
path = "";
}
setListAdapter(new SimpleAdapter(this, getData(path),
android.R.layout.simple_list_item_1, new String[] { "title" },
new int[] { android.R.id.text1 }));
getListView().setTextFilterEnabled(true);
}
getData
函数创建了一个Map对象并指定了当用户点击TextView列表元素时的相应意图。在内部,它使用了这个函数:
protected void addItem(List<Map<String, Object>> data, String name, Intent intent) {
Map<String, Object> temp = new HashMap<String, Object>();
temp.put("title", name);
temp.put("intent", intent);
data.add(temp);
}
这是如何使用
title
填充地图的,正如您在上面看到的,它被映射到布局XML中的@android/text1
。我想将每个TextView的内容描述设置为与
name
相同的值。 我尝试过的方法:(1):循环遍历生成的ListView的子项,并在每个子项上调用
item.setContentDescription(xxx)
。这没有起作用; 显然在我循环遍历这些项的时候,它们还不可见/不可访问/不存在,无论如何,尝试调用setContentDescription都会发生错误。(2):为此修改后的TextView创建新的布局XML,其中包括
android:contentDescription
。布局XML如下所示:<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:contentDescription="@android:id/text2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:gravity="center_vertical"
android:paddingLeft="6dip"
android:minHeight="?android:attr/listPreferredItemHeight">
</TextView>
我随后确保了 "contentDescription" 被添加到由 addItem
返回的 Map 中,并将初始化代码更改为以下内容:
setListAdapter(new SimpleAdapter(this, getData(path),
R.layout.simple_list_item_with_desc, new String[] { "title", "contentDescription" },
new int[] { android.R.id.text1, android.R.id.text2 }));
换句话说,我试图从静态数据映射中获取“contentDescription”,以填充由
android.R.id.text2
定义的布局XML中的字段。这也没有起作用——没有失败,但是当我检查uiautomatorviewer中的列表时,没有可用的内容描述。这可能是因为我不理解
android.R.id.text2
的含义,除了作为某种值的占位符之外。我还尝试了具有相同结果的android.R.id.content
。因此,我的问题是,如何动态设置这些TextView的contentDescription?