Android – evitare TalkBack da annunciare TextView titolo ad alta voce

Sto sviluppando un accessibile applicazione android dove le persone sarebbero state utilizzando la funzione Esplora al Tocco e TalkBack servizi di accessibilità per utilizzare la mia applicazione.

Questo è il mio Android XML codice:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/forename"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dip"
        android:layout_marginLeft="15dip"
        android:textSize="20sp"
        android:text="@string/forenameText" 
        android:contentDescription="@null"/>

    <EditText
        android:id="@+id/EditTextForename"
        android:layout_width="285dp"
        android:layout_height="65dp"
        android:layout_marginTop="10dip"
        android:layout_marginLeft="15dip"
        android:hint="@string/forenameHint"
        android:inputType="textPersonName"
        android:lines="1"
        android:singleLine="true"
        android:textSize="20sp" >
    </EditText>

</LinearLayout>

strings.xml

<string name="forenameText">Forename</string>
<string name="forenameHint">Enter your forename here</string>

TextView visualizza il titolo di “Nome” e EditText mi permette di inserire alcuni dettagli in forma di campo. Il problema che ho è che quando ho
trascinare il dito sullo schermo utilizzando la funzione Esplora al Tocco, TalkBack, riprende il titolo di una TextView e annuncia ad alta voce, “Nome”. Voglio la TextView per visualizzare solo il testo e non a fornire un feedback sonoro.

Ho impostato contentDescription a @null come si può vedere dal codice di cui sopra, ma TalkBack ancora annuncia “Nome” quando il mio dito è posizionato sopra il
TextView.

Ho anche provato impostazione contentDescription nella mia classe Java:

TextView forename=(TextView)findViewById(R.id.forename);
forename.setContentDescription("");

Tuttavia, ho ancora lo stesso problema. C’è qualche altro modo per impostare contentDescription di null/vuoto e prevenire TalkBack da annunciare ad alta voce?

Codice Java:

public class MainActivity extends Activity{

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        View forename = findViewById(R.id.forename);

        forename.setAccessibilityDelegate(new AccessibilityDelegate() {
          public boolean performAccessibilityAction (View host, int action, Bundle args){
            return true;
          }
        });
    }

}

OriginaleL’autore Alex | 2013-03-30

6 Replies
  1. 12

    Stavo cercando di fare lo stesso oggi, ed è stato in grado di impostare un 'empty' contentDescription su un TextView come (utilizzando un non-breaking spazio):

    decorativeTextView.setContentDescription("\u00A0"); 

    ora TalkBack non dice niente di che TextView.

    ma sono d’accordo con Nick, lasciando l’etichetta leggibile nel tuo caso, perché suggerimento è di leggere solo per svuotare EditTexts.

    Il problema è stato risolto. Grazie mille per il vostro aiuto! Si prega di vedere il mio commento sotto il Nick post. Ho un altro problema che sto cercando di risolvere ora.
    re. che nuovo problema nel tuo commento: non capisco il comportamento con il vostro originariamente inviato layout, con alcuni duplicati TextView-EditText coppie di test. non si vede l’accessibilità casella di fuoco intorno a un individuo TextField che stai toccando quando questo accade? Ho scoperto che se il contenitore (ad esempio LinearLayout) ottiene accessibilityfocus invece yellowbox), la lettura-solo i bambini sarebbero tutti da leggere, e non sono considerati individualmente ‘tangibile’ – così si potrebbe pensare di aver toccato il TextField, ma l’evento (e focus) in realtà è andato attraverso di genitore…
    La mia “risposta”, cita l’API specifiche, aggiornamenti, questa soluzione funziona per le versioni precedenti di Android, come pure! Grazie!
    Helpul risposta!!! 🙂
    Questa tecnica è particolarmente utile in RecyclerView: ho applicato questo il viewHolder.itemView. Attenzione, la vista deve essere attivabile.

    OriginaleL’autore salfon

  2. 19

    Per una migliore compatibilità:

    ViewCompat.setImportantForAccessibility(
            decorativeTextView,
            ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO);

    OriginaleL’autore bonstio

  3. 2

    Perché non si desidera che il TextView parlare “nome”? Viene utilizzato come etichetta per la EditText. Una volta che l’utente ha inserito un testo il suggerimento “inserisci il tuo nome qui” non sarebbe più parlato – per quanto ne so – in modo che il TextView dato l’utente un po ‘ di contesto per la EditText.

    Allo stesso modo, l’annuncio di una “modifica” offre all’utente il ruolo della EditText di controllo. Mentre “campo modulo” potrebbe essere migliore, non sarebbe lo stesso comportamento come in altre applicazioni e del sistema operativo.

    Che è un buon punto. Il motivo non si desidera che il TextView per fornire qualsiasi feedback sonoro, è perché ho più di un TextViews e EditText campi di applicazione. Il problema che ho è che se uno dei TextViews, TalkBack annuncia il TextViews ad alta voce. Quindi, anche se io punto alla TextView che si trova nella parte inferiore dello schermo, TalkBack annuncia il TextViews uno per uno. Devo ancora capire che cosa provoca questo problema.
    Cosa intendi per “punto alla TextView”?
    scusa volevo dire quando ho trascinare il dito su un particolare TextView sullo schermo, tutti i TextViews sono annunciati, da uno screen reader.
    Siete testo raccolto in una listView o altro contenitore, in cui il contenitore ha il importantForAccessibility proprietà specificamente impostato su “sì”?

    OriginaleL’autore Nick Williamson

  4. 2

    Ho avuto un problema simile. Alla fine ho risolto utilizzando il setAccessibilityDelegate metodo e l’override di View.AccessibilityDelegate's performAccessibilityAction metodo.

    provare questo:

    View forename = findViewById(R.id.forename);
    
    forename.setAccessibilityDelegate(new AccessibilityDelegate() {
      public boolean performAccessibilityAction (View host, int action, Bundle args){
        return true;
      }
    });
    Ti ringrazio per la risposta, mmaloon. Ho applicato la soluzione al mio programma, ma purtroppo TalkBack ancora annuncia un “nome” ad alta voce. Ho aggiornato il mio post originale con codice Java che ho attualmente. La mia attuale soluzione è utilizzare ImageViews invece di TextViews come impostazione predefinita, essi non forniscono alcun feedback sonoro.
    Ho anche un’altra domanda per quanto riguarda la mia EditText campo modulo. Ho un “suggerimento” attributo lì che legge una stringa chiamata “forenameHint”. Stringa che contiene il testo seguente: “Inserisci il tuo nome qui”. Quando uso Esplorare da Toccare e trascinare il dito attraverso il campo del form, TalkBack annuncia “casella di Modifica Inserisci il tuo nome qui”. C’è un modo per evitare che annunciano la “Modifica” prima di ogni stringa il suggerimento attributo? O forse cambiare in qualcosa di più user friendly come “campo Modulo: Inserisci il tuo nome qui”? Grazie in anticipo

    OriginaleL’autore mmaloon

  5. 0

    Ho avuto lo stesso problema, e l’unica cosa che ha funzionato per me è stato android:contentDescription=" " (spazio bianco).

    Impostazione contentDescription lo spazio bianco usato per lavorare per me in passato. Un paio di settimane fa TalkBack ha rilasciato un nuovo aggiornamento per il software e dopo che il lettore di schermo ha iniziato annunciando il “testo” stringa del mio TextView ad alta voce, non importa se il contentDescription è stato impostato lo spazio bianco o nullo. Sono sicuro che c’è un modo per risolvere il problema utilizzando avanzate di accessibilità servizi come mmaloon ha suggerito, ma non ho le conoscenze per implementare la loro sicurezza.

    OriginaleL’autore

Lascia un commento