android辅助功能demo,Android中的辅助功能实现问题
我正在开发查看图书的应用程序。有一个屏幕(活动),显示一本书。它有自定义视图,类似于ViewSwitcher和每个页面是一个位图,由一个自定义视图呈现。现在我应该实现辅助功能 – 书应该由手机读取(音频)。我使用SupportLibrary的无障碍管理,现在我有这个代码在ViewGroup(管理书页)。代码1:private class EditionPagesViewSwitcherAccess
我正在开发查看图书的应用程序。有一个屏幕(活动),显示一本书。它有自定义视图,类似于ViewSwitcher和每个页面是一个位图,由一个自定义视图呈现。
现在我应该实现辅助功能 – 书应该由手机读取(音频)。
我使用SupportLibrary的无障碍管理,现在我有这个代码在ViewGroup(管理书页)。代码1:
private class EditionPagesViewSwitcherAccessibilityDelegate extends AccessibilityDelegateCompat {
private int mPageCount;
private double[] mPageRange;
@Override
public void onInitializeAccessibilityEvent(final View host, final AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(host, event);
event.setClassName(EditionPagesViewSwitcher.class.getName());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
event.setScrollable(canScroll());
}
if (event.getEventType() == AccessibilityEventCompat.TYPE_VIEW_SCROLLED && updatePageValues()) {
event.setItemCount(mPageCount);
// we use +1 because of user friendly numbers (from 1 not 0)
event.setFromIndex((int) (mPageRange[0] + 1));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
event.setToIndex((int) (mPageRange[1] + 1));
}
}
}
@Override
public void onInitializeAccessibilityNodeInfo(final View host, final AccessibilityNodeInfoCompat info) {
super.onInitializeAccessibilityNodeInfo(host, info);
info.setClassName(EditionPagesViewSwitcher.class.getName());
info.setScrollable(canScroll());
info.setLongClickable(true);
if (canScrollForward()) {
info.addAction(AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD);
}
if (canScrollBackward()) {
info.addAction(AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD);
}
}
@Override
public boolean performAccessibilityAction(final View host, final int action, final Bundle args) {
if (super.performAccessibilityAction(host, action, args)) {
return true;
}
switch (action) {
case AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD: {
if (canScrollForward()) {
showNext();
return true;
}
}
return false;
case AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD: {
if (canScrollBackward()) {
showPrevious();
return true;
}
}
return false;
}
return false;
}
这里是从页面视图代码2:
@Override
public void onInitializeAccessibilityEvent(final View host, final AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(host, event);
event.setClassName(EditionPageView.class.getName());
if (hasText()) {
event.getText().add(getPageRangeText());
final String trimText = mSurfaceUpdateData.getPageText().trim();
if (trimText.length() > MAX_TEXT_LENGTH) {
event.getText().add(trimText.substring(0, MAX_TEXT_LENGTH));
// event.getText().add(trimText.substring(MAX_TEXT_LENGTH, trimText.length()));
}
else {
event.getText().add(trimText);
}
}
}
@Override
public void onInitializeAccessibilityNodeInfo(final View host, final AccessibilityNodeInfoCompat info) {
super.onInitializeAccessibilityNodeInfo(host, info);
info.setClassName(EditionPageView.class.getName());
}
因为页面文本数据加载异步第一次可访问性没有任何文本,而执行onInitializeAccessibilityEvent代码。然后当数据加载时,我触发AccessibilityEvent.TYPE_VIEW_SELECTED和AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED事件。然后onInitializeAccessibilityEvent再次执行和手机“读”书文本。
所以我的问题:
>我的辅助功能实施是否正确?可能是设计错了吗?因为我没有找到任何有关此功能的好教程。
>为什么我需要在代码1的支持实现中使用SDK版本检查?为什么支持实现不能正确处理?
>正在启动TYPE_VIEW_SELECTED和TYPE_VIEW_TEXT_CHANGED吗?还是可能还有一些其他的代码应该实现?
>主要问题。在代码2中有注释代码行。这段代码语句子字符串的文本小于MAX_TEXT_LENGTH(它的3800),因为如果文本更大没有什么是播放。没有。是无障碍限制吗?任何小于此值的其他文本都会播放。
>有谁知道我在哪里可以找到任何好的教程? (是的,我看到样品)。
>有没有人有任何自定义实现来浏览?
更新
好。这里有一些答案:
>我可以看到,如果您不希望在您收到此文本后立即阅读,则不需要TYPE_VIEW_SELECTED和TYPE_VIEW_TEXT_CHANGED事件。
>在Nexus 7上,所有大文本都可以播放(文本高达8000符号),所以这个问题不会再现,但在三星Galaxy Tab 10.1(Android 4.0.4)和与Android 4.3的Tab 10.1的Genymotion模拟器。这是奇怪的…
更多推荐
所有评论(0)