Я пытаюсь обновить пример кода приложения Android «API Demos», чтобы элементы TextView в списке активности по умолчанию имели «описание содержимого», необходимое для доступности. Это то, что инициализация выглядит для списка в этой деятельности:Установить содержимоеОписание динамически при заполнении списка TextViews
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. Внутри она использует эту функцию:
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): Создание нового формата XML для этого модифицированного TextView, который включает в себя 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
, и изменил код инициализации выглядеть следующим образом:
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, определяемом android.R.id.text2
.
Это также не сработало - без сбоев, но когда я просматриваю список в uiautomatorviewer, описание содержимого не доступно. Это может быть из-за того, что я не понимаю, что означает android.R.id.text2
, за исключением того, что это местозаполнитель для какой-либо ценности. Я также попробовал android.R.id.content
с тем же результатом.
Так что мой вопрос в том, как динамически установить содержание описания этих текстовых элементов?
Awesome, спасибо! Это решило это для меня. –