2016-09-12 19 views
5

Tôi có chế độ xem có trình xử lý tác vụ báo chí dài. Tôi sử dụng mô tả nội dung để đặt tin nhắn Talkback nói khi chế độ xem được lấy nét.Cách thay đổi hướng dẫn talkback của Android cho nhấn đúp và nhấn và giữ

Hiện nay nó nói mô tả nội dung của tôi ngay sau khi nhận được một tập trung, và sau khi tạm dừng ngắn nói:

Nhấp đúp để kích hoạt, nhấn đúp và giữ cho báo chí dài

Tôi muốn thay đổi thông điệp này thành một cái gì đó giống như

nhấn đúp để "hành động 1", nhấn đúp và giữ cho "action 2"

Có cách nào để làm như vậy không?

Tôi đã xem xét onPopulateAccessibilityEvent(), nó nhận được sự kiện TYPE_VIEW_ACCESSIBILITY_FOCUSED, nhưng tôi không thể thay đổi thông báo mong muốn.

Tôi có thiếu thứ gì đó đơn giản không?

+1

Tôi không nghĩ đó là-- Tôi nghĩ đó là những mô tả mặc định từ chính ứng dụng thảo luận. –

Trả lời

3

Trong API 21+, bạn có thể tùy chỉnh tên hành động bằng cách thiết lập các tác vụ tùy chỉnh trên AccessibilityNodeInfo của Chế độ xem của bạn. Có hai cách tiếp cận cho điều này: 1) thiết lập một AccessibilityDelegate và ghi đè phương thức đại biểu onInitializeAccessibilityNodeInfo hoặc 2) mở rộng lớp của chế độ xem và ghi đè onInitializeAccessibilityNodeInfo.

Dù bằng cách nào, bạn sẽ xây dựng một AccessibilityAction mới và đặt nó trên nút bằng cách sử dụng AccessibilityNodeInfo.addAction.

Nếu bạn đã chọn để sử dụng một đại biểu, bạn sẽ thiết lập một mô tả tùy chỉnh cho các hành động nhấp chuột như sau:

view.setAccessibilityDelegate(new AccessibilityDelegate() { 
    @Override 
    public void onInitializeAccessibilityNodeInfo(
     View v, AccessibilityNodeInfo info) { 
    super.onInitializeAccessibilityNodeInfo(v, info); 

    // A custom action description. For example, you could use "pause" 
    // to have TalkBack speak "double-tap to pause." 
    CharSequence description = getResources().getText(R.string.my_click_desc); 
    AccessibilityAction customClick = new AccessibilityAction(
      AccessibilityAction.ACTION_ACTION_CLICK, description); 
    info.addAction(customClick); 
    } 
}); 

Nếu bạn mục tiêu ứng dụng API < 21, thay thế các phương pháp *Compat thư viện hỗ trợ thích hợp. Đối tượng địa lý không được trả lại, do đó bạn sẽ không nhận được mô tả tùy chỉnh trên API < 21, nhưng bạn sẽ có thể tránh kiểm tra phiên bản rõ ràng trong mã ứng dụng của mình.

+0

Áp dụng * Compat cho điều này - bạn có thể đăng một ví dụ không? setAccessibilityDelegate không có một compat cũng như không có một setter cho phiên bản compat. – fobbymaster

+0

@fobbymaster sử dụng ViewCompat.setAccessibilityDelegate (Xem v, AccessibilityDelegateCompat delegate) – qtyq

+0

@alanv, điều này sẽ chỉ thêm vào danh sách hiện có đúng không? Nó vẫn sẽ nói 'nhấn đúp để kích hoạt' theo sau là 'nhấn đúp để tạm dừng' của bạn? – user3030130

1

Có vẻ như AccessibilityAction đã thay đổi đôi chút kể từ khi alanv đăng câu trả lời của mình. Đây là giải pháp hoạt động sử dụng ViewCompat:

ViewCompat.setAccessibilityDelegate(view, new AccessibilityDelegateCompat() { 
    @Override 
    public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) { 
     super.onInitializeAccessibilityNodeInfo(host, info); 
     // A custom action description. For example, you could use "pause" 
     // to have TalkBack speak "double-tap to pause." 
     CharSequence description = host.getResources().getText(R.string.my_click_desc); 
     AccessibilityActionCompat customClick = new AccessibilityActionCompat(
        AccessibilityNodeInfoCompat.ACTION_CLICK, description); 
     info.addAction(customClick); 
    } 
}); 
0

Sử dụng mã bên dưới cho những người muốn xóa tất cả cụm từ. "nhấn đúp vào".

ViewCompat.setAccessibilityDelegate(view, new AccessibilityDelegateCompat() { 
     @Override 
     public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) { 
      super.onInitializeAccessibilityNodeInfo(host, info); 
      info.addAction(AccessibilityNodeInfoCompat.ACTION_FOCUS); 
     } 
}); 

Về cơ bản, việc gọi mã bên dưới và requestFocus không có bất kỳ thông báo nhắc lại mặc định nào được liên kết với nó.

case AccessibilityNodeInfo.ACTION_FOCUS: { 
       if (!hasFocus()) { 
        // Get out of touch mode since accessibility 
        // wants to move focus around. 
        getViewRootImpl().ensureTouchMode(false); 
        return requestFocus(); 
       } 
      } 
Các vấn đề liên quan