2016-11-25 3 views
1

Cas d'utilisation:garder Android TalkBack en surbrillance position sur l'écran Rotation

  1. activer le service d'accessibilité Google Talkback et accédez à une application (par exemple Google Messenger)
  2. Dans cette application, en supposant que pour sélectionner, accédez arbitrairement à l'un d'entre eux en utilisant les gestes Talkback (balayez vers la droite ou simplement cliquez une fois sur l'un d'eux)
  3. Faire pivoter l'écran

Comportement attendu:

  • L'élément précédemment mis en évidence devrait être mis en évidence encore; l'utilisateur devrait être en mesure de poursuivre son navigation
  • L'application Google Messenger est un parfait exemple de ce comportement correct

Messenger After rotation

Mon comportement app Sunshine:

  • L'élément précédemment mis en surbrillance n'est pas surligné après l'écran Rotation
  • L'utilisateur doit naviguer à nouveau la fonction de l'écran élément
  • précédemment sélectionné, trouver et ayant un élément sélectionné à nouveau peut être une douleur ... pas ce que nous voulons inciter à nos utilisateurs

Sunshine After rotation

Comment devrions-nous mettre en œuvre cela? Je pense, en tant que solution, à Accessibility Events et les intercepter ... mais cela ne semble pas être juste, ne semble pas être une «meilleure pratique» (par exemple créer une vue personnalisée et implémenter les méthodes traitement de ces événements)

! Notez que le vert a mis en évidence un élément de liste ne semble pas être concentré (getCurrentFocused() retours null)

! Notez que les éléments de la liste deviennent concentrés si nous utilisons la navigation D-Pad, au lieu de la navigation TalkBack (mais ceci est une autre discussion ...)


LE:

  • J'ai passé une toute la journée sur ce, en essayant de "mettre l'accent" de l'article en surbrillance , mais l'article n'est pas concentré.Voilà pourquoi je suppose que cette fonction doit être abordée d'une autre façon et je voudrais connaître votre (!) a connu avis avant que je passe encore 2 jours recréer tous les composants Android utilisés (comme Je suppose que cela pourrait se faire - cela ne semble pas très « meilleures pratiques », ne pas )
  • ce n'est pas un devoirs, il n'y a rien de mal avec mon code actuel (donc? il n'y a pas de code à afficher, à moins que l'on ne veuille mon projet entier) et, étant donné que c'est mon premier poste, je ne pouvais pas attacher plus de 2 images (c'est pourquoi les écrans "avant" sont manquants)
  • Juste donnez-moi un bon indice, basé sur l'expérience, et je vais mettre en œuvre et poster le fini, travaillant code ici.
+0

Deux choses: 1er: Cela ressemble à un travail à domicile ... Pour cela (comme pour toute autre question sur Stackoverflow) montrent l'effort que vous avez fait pour résoudre ce! S'il n'y a pas de code et avec ça pas d'erreurs vous avez tort ici! 2ème: Si cela a quelque chose à voir avec Android (minuscule indice ici) il y a un tag pour ça. Les autres tags que vous avez utilisés ne sont probablement pas directement consultés par d'autres car ils peuvent s'appliquer à n'importe quel langage de programmation! – geisterfurz007

+1

Ce n'est pas un devoir! "Sunshine" est une application développée dans le cadre d'un cours gratuit (Udacity - "Développer des applications Android"). Il n'y a pas de code car mon code n'a rien à redire! Je ne demande pas ici "pourquoi mon code échoue? Voici un échantillon!". Je demande "comment faites-vous une telle chose". La réponse est simple si vous l'avez déjà fait, dans votre vie. S'il vous plaît, ne pas troll ma première et seule publication ... – veve

+0

Je sais que c'est votre premier message en raison de la file d'attente de révision. Cela n'a pas été prévu pour traîner du tout. La formulation de la question implique le sentiment d'une copie et une tâche collée de quelque part et ceci, dans la plupart des cas, sont des devoirs malheureusement. Et si votre code n'a rien de mal et cela fonctionne pourquoi la question. Je n'ai pas mis en place quelque chose comme ça, mais je ne comprends pas vraiment votre point de vue. Pourquoi demandez-vous si vous avez déjà un code de travail? – geisterfurz007

Répondre

0

Il devrait fonctionner hors de la boîte si vous implémentez ID stables dans votre RecyclerView.Adapter (et désactiver potentiellement le que vous pouvez faire conditionnellement si Talkback est activée ItemAnimator sur la RecyclerView (rv.setItemAnimator(null))).

Voici a blog post I wrote about the item animator bug.

+1

Réponse intéressante. Lorsque j'ai écrit ici à propos de ce défi, j'utilisais un ListView. Maintenant, je suis passé à un RecyclerView. Je vais essayer de mettre en œuvre cette fonctionnalité d'accessibilité à nouveau (comme j'ai reporté l'affaire). Je vous le ferai savoir. Merci beaucoup! – veve

0

J'ai rencontré le même problème en travaillant sur le même projet.

Conseil: listView.setItemChecked(int position, boolean value);

Bonne chance :)

+0

J'ai déménagé, mais votre suggestion me rend curieux! Merci beaucoup! – veve