Sto sviluppando un'applicazione Android accessibile in cui le persone utilizzano i servizi di accessibilità Explore by Touch e TalkBack per utilizzare la mia applicazione.Android - impedisce a TalkBack di annunciare ad alta voce il titolo di TextView
Questo è il mio codice XML Android:
<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 "Forename" e EditText mi permette di inserire alcuni dettagli nel campo del modulo. Il problema che ho è che quando I trascina il dito sullo schermo usando Esplora al tocco, TalkBack prende il titolo del TextView e lo annuncia ad alta voce come "Nome". Voglio che TextView visualizzi solo il testo e non fornisca alcun feedback udibile.
Ho impostato contentDescription su @null come si può vedere dal codice sopra, ma TalkBack annuncia ancora "Nome" quando il mio dito si trova sopra il TextView .
Inoltre ho provato a fissare contentDescription nella mia classe Java:
TextView forename=(TextView)findViewById(R.id.forename);
forename.setContentDescription("");
Tuttavia, ho ancora lo stesso problema. C'è un altro modo per impostare contentDescription su null/empty e impedire a TalkBack di annunciarlo 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;
}
});
}
}
Questo ha risolto il problema. Grazie mille per il vostro aiuto! Si prega di vedere il mio commento sotto il post di Nick. Ho un altro problema che sto cercando di risolvere ora. – Alex
ri. quel nuovo problema nel tuo commento: non ottengo quel comportamento con il tuo layout pubblicato originariamente, con alcune coppie di TextView-EditText duplicate da testare. vedi la finestra di messa a fuoco sull'accessibilità attorno a un singolo campo di testo che stai toccando quando questo accade? Ho scoperto che se il contenitore (ad esempio LinearLayout) ottiene accessibilityfocus invece (la yellowbox), i bambini di sola lettura dovrebbero essere letti e non vengono considerati come "tangibili" singolarmente - quindi potresti pensare di aver toccato il campo di testo , ma l'evento (e il focus) sono passati a genitore ... – salfon
La mia "risposta" menziona gli aggiornamenti specifici dell'API, questa soluzione funziona anche per le versioni precedenti di Android! Grazie! – Matt