2012-09-26 41 views
0

我用谷歌UserRowView類作爲如何才能覆蓋dispatchAccessibilityEvent()的模板有話語提示說自定義消息:如何在列表項獲得焦點時更改「話語提示」語音?

public class UserRowView extends LinearLayout { 
       . 
       . 
    public void setText(String text) 
     _message = text; 
    } 

    @Override 
    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent accessEvent) { 
     Context ctx = this.getContext(); 
     accessEvent.setClassName(getClass().getName()); 
     accessEvent.setPackageName(ctx.getPackageName()); 
     accessEvent.getText().clear(); 
     accessEvent.getText().add(_message); 
     return true; 
    } 

列表項佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:minHeight="?android:attr/listPreferredItemHeight" 
android:background="@color/all_white"> 
<ImageView 
    android:id="@+id/catalog_entry_image" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:src="@drawable/member_active" /> 
<com.topiatechnology.skoot.android.util.UserRowView 
    android:id="@+id/catalog_entry_user_row_view" 
    android:orientation="vertical" 
    android:layout_width="0dip" 
    android:layout_weight="1" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" 
    > 
    <TextView 
     android:id="@+id/catalog_entry_name_text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
    /> 
    <TextView 
     android:id="@+id/catalog_entry_size_text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
    /> 
    <TextView 
     android:id="@+id/catalog_entry_date_text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
    /> 
    <ProgressBar 
     style="?android:attr/progressBarStyleHorizontal" 
     android:layout_width="200dip" 
     android:layout_height="wrap_content" 
     android:id="@+id/catalog_entry_progress_bar" 
     android:visibility="gone" 
    /> 
</com.topiatechnology.skoot.android.util.UserRowView> 
</LinearLayout> 

我在ListView的適配器中的getView()方法中設置文本。

問題在於,TalkBack不會更改列表項目關注時所說的文本。

對於上面的佈局,三個TextViews的文本被說出來,而我想要我設置的文本被說出。我怎樣才能做到這一點?

回答

4

使用View.setContentDescription()可在包含您不想朗讀的視圖的佈局上設置內容描述。 「話語提示」將讀取內容說明並忽略子視圖的文本。

. . . 

public void setText(String text) 
    _message = text; 
    setContentDescription(_message); 
} 

通常,不再推薦設置AccessibilityEvent文本來控制來自焦點和選擇的反饋。

+0

在我嘗試覆蓋dispatchPopulateAccessibilityEvent之前,我一直在設置內容描述,但忘記使視圖無效。我在您的建議中刪除了覆蓋。一旦我在調用setContentDescription之後使視圖無效,說明就被朗讀了。值得注意的是,我注意到佈局中視圖的內容描述仍在使用中。 – benkdev

+0

您能檢查您正在運行的TalkBack的版本嗎?設置>應用程序>所有> TalkBack – alanv

+0

我正在運行版本3.1.1_r68。 – benkdev

相關問題