2013-12-17 5 views
0

Я пытаюсь реализовать доступность для нескольких пользовательских представлений для приложения для Android.Android: добавление доступа к настраиваемому представлению

Я конденсируется, что делается в Google Authenticator app не повезло:

public class CardView extends RelativeLayout { 

    // ... 

    @Override 
    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { 
     event.setClassName(this.getClass().getName()); 
     event.setPackageName(this.getContext().getPackageName()); 
     event.getText().add("Card Test"); 
     return true; 
    } 
} 

Все озвучиваться отчеты обратно «Дважды нажмите, чтобы выбрать», когда он находится внутри ListView или ViewPager.

ViewPager переопределяет события доступности?

Что мне нужно сделать, чтобы TalkBack сказал «Тест карты» внутри ViewPagers и ListViews, как я ожидаю?

ответ

0

ListView и связанные с ними классы ожидают, что вы использовать onItemSelectedListener вместо присвоения onClickListener каждому View (и это справедливо).

0

Для текущих версий Android вам необходимо установить описание содержимого.

myView.setContentDescription("Card Test"); 
+0

Привет, Алан, похоже, что он работает в некоторых случаях, это потрясающе! Когда он помещается в ListView или ViewPager, сообщается тот же «Double-tap to select». Знаете ли вы, почему ListViews и ViewPagers препятствуют представлению пользовательского представления из представления содержимого? – Brad

+0

Вы имеете в виду, что это не означает описание содержимого при вставке в ListView или добавление подсказки «двойного касания», и вы предпочтете этого? – alanv

+0

Это не говорит о содержимом вообще, когда помещается в ListView. Причина в том, что представления возвращают false для isHoverable(), когда вы устанавливаете OnClickListener. Мне просто нужно будет использовать рефакторинг для использования onItemSelectedListener. – Brad

0

Если включение предложения alanv, попробуйте убедить андроида систему, чтобы зачитать описание содержания

либо

Если (accessibilityModeIsEnabled()) // пользовательский метод, который проверяет context.getSystemService (Context.ACCESSIBILITY_SERVICE) .isEnabled()

myView.sendAccessibilityEvent (AccessibilityEvent.TYPE_VIEW_HOVER_ENTER);

или AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED.

или requestFocus

Выше следует делать, когда MyView видна. Может быть во время onMesasure, когда ширина и высота являются положительными.

Если просмотр списка по-прежнему невозможен, попробуйте выполнить указанные выше трюки в первом элементе списка. Доступность в Android варьируется от устройств к устройству, а не одна стратегия подходит всем

Смежные вопросы