2013-12-17 78 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中像我期望的那樣說「Card Test」,我需要做些什麼?

回答

0

ListView以及相關的類期待您使用onItemSelectedListener,而不是分配一個onClickListener每個視圖(理所當然的)。

0

對於當前版本的Android,您需要設置視圖的內容描述。

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

嗨,Alan,這看起來像是在某些情況下工作,這太棒了!當它被放入ListView或ViewPager中時,會報告相同的「雙擊選擇」。你知道爲什麼ListViews和ViewPagers阻止自定義View報告內容視圖嗎? – Brad

+0

你的意思是說,當把它放到一個ListView中時,它不會說內容描述,或者它附加了「雙擊」提示,而你不喜歡它? – alanv

+0

放入ListView時根本不會講內容。原因是當您設置OnClickListener時,Views返回false爲isHoverable()。我只需要重構使用onItemSelectedListener。 – Brad

0

如果結合alanv的建議,試圖說服Android系統的任一

讀出內容描述

如果(accessibilityModeIsEnabled())//來檢查context.getSystemService自定義方法(Context.ACCESSIBILITY_SERVICE) .isEnabled()

myView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_HOVER_ENTER);

或AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED。

或requestFocus

以上應該在myView可見時完成。可能在onMesasure時,寬度和高度都是正數

如果列表視圖仍然無法這樣做,則嘗試對列表視圖的第一個元素執行上述技巧。 Android中的可訪問性因設備而異,而不是一種策略適合所有人