2017-05-31 5 views
3

Ainsi, pour un projet au travail, nous avons été chargés de créer une application Roku pour un client. Désolé si c'est une question stupide, mais je n'ai jamais touché le développement de brightscript ou Roku en général, et je suis surtout un développeur de réaction/javascript. Je suis en train de me frayer un chemin, et je suis maintenant dans une situation où j'essaie de créer un composant de scène pour afficher un clavier, et un ButtonGroup affiché ci-dessous. Le groupe de boutons sert essentiellement à choisir soit de soumettre ce qui se trouve dans le champ de texte Clavier, soit d'annuler l'entrée.Comment déplacer la mise au point entre un clavier et un groupe de boutons sur un écran?

Jusqu'à présent, j'ai tous les éléments dans le rendu des composants et la mise au point au clavier (ce qui semble nécessaire, sinon, le clavier ne sera pas sélectionnable en appuyant simplement sur la télécommande). Cependant, lorsque je navigue sur le clavier, je ne trouve aucun moyen de déplacer le focus sur le groupe de boutons. Fondamentalement, si j'appuie sur la télécommande sur la rangée inférieure du clavier, cela ne fait rien. Il ne déplace jamais le focus vers le buttongroup. J'espère simplement que quelqu'un pourra m'aider à comprendre cela. Je sais que la réponse est probablement évidente et je la rate tout simplement, mais je me suis tapé la tête contre toute cette matinée, jouant avec certaines choses, et je n'arrive pas à comprendre. Ci-dessous, un exemple du composant qui loge le clavier et le groupe de boutons-poussoirs. N'hésitez pas à critiquer quoi que ce soit d'autre que vous voyez, je fais aussi mal, car encore une fois, je n'ai pas la moindre idée quand il s'agit de Roku dev.

<?xml version="1.0" encoding="utf-8" ?> 
<!-- Copyright 2016 Roku Corp. All Rights Reserved. --> 
<component name="MemberEmail" extends="Group"> 

    <children> 
    <LayoutGroup id="MemberEmailLayout" translation = "[ 0, 0 ]" itemSpacings="[20]"> 
     <Keyboard id="EmailKeyboard" /> 
     <ButtonGroup id="EmailButtonGroup" /> 
    </LayoutGroup> 
    </children> 
    <script type = "text/brightscript" > 

    <![CDATA[ 

    sub init() 
     m.parentNode = m.top.getParent() 

     m.memberEmailLayout = m.top.findNode("MemberEmailLayout") 
     m.emailKeyboard = m.top.findNode("EmailKeyboard") 
     m.emailButtonGroup = m.top.findNode("EmailButtonGroup") 

     m.emailButtonGroup.buttons = ["Submit", "Cancel"] 
     m.emailButtonGroup.observeField("buttonSelected","buttonPressed") 

     emailKeyboardRect = m.memberEmailLayout.boundingRect() 
     emailKeyboardCenterX = (1920 - emailKeyboardRect.width)/2 
     emailKeyboardCenterY = (1080 - emailKeyboardRect.height)/2 
     m.memberEmailLayout.translation = [ emailKeyboardCenterX, emailKeyboardCenterY ] 

    end sub 

    sub buttonPressed() 
     if m.emailButtonGroup.buttonSelected = 1 then 
     print "SUBMIT BUTTON SELECTED" 
     print "Input Value is"; m.emailKeyboard.text 
     m.parentNode.currentStep = "password" 
     else if m.emailButtonGroup.buttonSelected = 2 then 
     print "CANCEL BUTTON SELECTED" 
     end if 
    end sub 
    ]]> 

    </script> 

</component> 

Répondre

5

Vous pouvez en savoir plus sur la fonction onKeyEvent dans la documentation. Ajoutez cette fonction à votre composant:

function onKeyEvent(key as String, press as Boolean) as Boolean 
     handled = false 

     if press 
      if key = "down" and not m.emailButtonGroup.hasFocus() 
       m.emailButtonGroup.setFocus(true) 
       handled = true 
      else if key = "up" and not m.emailKeyboard.hasFocus() 
       m.emailKeyboard.setFocus(true) 
       handled = true 
      end if 
     end if 

     return handled 
    end function 
+0

Oh mon dieu, merci! Je connaissais onKeyEvent, comme je l'utilise ailleurs, mais je l'avais en quelque sorte sauté dans le cas de ce composant en pensant qu'il se déclencherait "en bas" et "en haut" même en déplaçant les caractères du clavier ou les boutons du clavier. Après l'avoir vu en mouvement, apprenez comment ça fonctionne maintenant. Merci beaucoup pour votre réponse rapide et la bonne réponse. – curmudgeon1005

+0

Votre bienvenue :) –