2014-09-01 5 views
2

"MultiAutoCompleteTextView"에서 확장 한 사용자 정의보기가 있습니다. 사용자가 CustomTextView에서 타이핑을 시작하면 팝업에 제안 된 값이 표시됩니다. 이 값 중 하나를 선택하면 CustomTextView가 선택된 값으로 채워집니다.MultiAutoCompleteTextView에 대해 선택된 값을 사용할 때 사용되는 텍스트를 설정하는 방법

선택할 수있는 값에는 ID와 이름이 있습니다. 기본적으로 사용자가 목록에서 값을 선택하고 CustomTextView가 선택한 값으로 채워지면 TalkBack은 선택한 항목의 ID를 이상한 방식으로 읽습니다.

그것은 ID가 사과했다 경우는

을 읽고 예를 들어

"(개별 charachers 등 해당 itemId) 쉼표 공간 SYN 대체합니다 (전체 단어로 상품 ID)"

를 읽고

"사과 사과 사과 쉼표 공간을 대체합니다"

ID가 아닌 이름을 읽고 싶습니다.

내게 필요한 옵션에 대한 사용자 지정보기를 추가하기위한 접근성 문서 읽기 (http://developer.android.com/guide/topics/ui/accessibility/apps.html#custom-views) 다른 API를 덮어 쓰려고 시도했지만 이벤트 텍스트를 설정하려고했지만 이벤트 텍스트에 아무 것도하지 않으면 아무 것도 읽지 않습니다. 내 CustomTextView에 내가 이벤트 텍스트가에서에 "테스트"를 업데이트지고 나의 디버깅 시스템 아웃에서 볼 수있는 코드

public void onPopulateAccessibilityEvent(AccessibilityEvent event){ 
    super.onPopulateAccessibilityEvent(event); 
    System.out.println("onPopulateAccessibilityEvent \n s = " + s 
         + "\n event text = " + event.getText()); 

    CharSequence c = "Test"; 
    event.getText().clear(); 
    event.getText().add(c); 

    System.out.println("event text after setting = " + event.getText()); 
} 

을 추가 한 있도록

난 단지 API를 위 (15) 등을 지원해야 id

onPopulateAccessibilityEvent 
s = Jo Blogs 
event text = [UID1234, ] 
event text after setting = [Test] 

따라서 "Test"문자열이 소리내어 읽히지 않는 이유는 무엇입니까? 어떤 아이디어?

참고 : 다음 코드를 추가하면 CustomTextView를 터치하면 "Touched on CustomTextView"를 올바르게 읽습니다. 그러나이 메소드를 덮어 쓰면 제안에서 항목을 처음 선택하고 CustomTextView를 채울 때와 아무런 차이가 없습니다.

@Override 
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info){ 
    super.onInitializeAccessibilityNodeInfo(info); 
    info.setText("Touched on CustomTextView"); 
} 

답변

0
With the following accessibility methods overwritten this now seems to be working 

@Override 
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info){ 
    super.onInitializeAccessibilityNodeInfo(info); 

    String s = getAccessibilityUsernameString(); 

    if (s != null && null != getAccessibilityUserNames()) { 
     info.setText(s); 
    } 
} 


@Override 
public void onPopulateAccessibilityEvent(AccessibilityEvent event) { 
    super.onPopulateAccessibilityEvent(event); 

    String s = getAccessibilityUsernameString(); 

    if (s != null) { 
     event.getText().clear(); 
     event.getText().add(s); 
    } 
} 

where "getAccessibilityUserNames()" gets a string containing the names of the objects selected and "getAccessibilityUsernameString" returns a string "Selected items are %1$s"