我正在尝试更新 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
当有人点击 TextView 列表元素之一时,该函数会创建一个具有适当意图的 Map。在内部,它使用这个函数:
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);
}
这就是使用 填充 Map 的方式title
,正如您在上面看到的那样,它@android/text1
在布局 XML 中被映射到。
我想将每个 TextViews 的内容描述设置为与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”添加到返回的 Map 中addItem
,并将初始化代码更改为如下所示:
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”,以填充由 .xml 定义的布局 XML 中的字段android.R.id.text2
。
这也不起作用——没有失败,但是当我检查 uiautomatorviewer 中的列表时,没有可用的内容描述。这可能是因为我不明白什么android.R.id.text2
意思,除了作为某种价值的占位符。我也尝试android.R.id.content
过同样的结果。
所以我的问题是,如何动态设置这些 TextView 的 contentDescription?