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 リスト要素の 1 つをタップしたときに指定された適切な意図を持つ 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);
}
これは、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>
次に、 によって返される Map に「contentDescription」が追加されていることを確認し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" を取得して、android.R.id.text2
.
これも機能しませんでした。失敗ではありませんが、uiautomatorviewer でリストを調べると、コンテンツの説明がありません。android.R.id.text2
なんらかの値のプレースホルダーである以外に、意味がわからないことが原因である可能性があります。android.R.id.content
私も同じ結果で試しました。
私の質問は、これらの TextViews の contentDescription を動的に設定するにはどうすればよいですか?