Forums Développement Multimédia

Aller au contenu

Désactiver une Saisie Texte

saisie texte android clavier slide

21 réponses à ce sujet

#1 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 464 messages

Posté 14 February 2019 - 08:40 AM

Bonjour,

Malgrés mon idée de script ci-dessous, je n'arrive pas à régler un problème lié à une saisie texte qui se trouve dans un clip que je slide de bas en haut.

Il peut arriver que lors du slide le doigt de l'utilisateur se pose sur la saisie texte pour déplacer le clip de haut en bas mais au relacher le clavier Android s'ouvre automatiquement ce qui est génant, je cherche donc une solution pour éviter ça, si vous avez des pistes ou idées, merci d'avance.


var posi_Down;  
var posi_Up;

form_visite.commentaire.addEventListener(MouseEvent.MOUSE_DOWN, com_Down);
form_visite.commentaire.addEventListener(MouseEvent.MOUSE_UP, com_Up);

function com_Down(e:MouseEvent):void
{
posi_Down = form_visite.y;
}

function com_Up(e:MouseEvent):void
{
posi_Up = form_visite.y;

if (posi_Up == posi_Down)

{
  e.target.enabled = true;
}

else

{
  e.target.enabled = false;
}
}
 


#2 chriss27

    Ceinture Blanche

  • Members
  • Pip
  • 3 messages

Posté 14 February 2019 - 19:44 PM

voilà comment je procèderais, mais je suis une novice :

function com_Down(e:MouseEvent):void
{
maSaisieTexte.addEventListener(FocusEvent.FOCUS_IN, onFocusIn);
posi_Down = form_visite.y;
}
function onFocusIn(e:FocusEvent):void
{
maSaisieTexte:selectable=false;
}
function com_Up(e:MouseEvent):void
{
maSaisieTexte.removeEventListener(FocusEvent.FOCUS_IN, onFocusIn);
reactiverSaisie();
posi_Up = form_visite.y;
if (posi_Up == posi_Down)
{
  e.target.enabled = true;
}
else
{
  e.target.enabled = false;
}
}
function reactiversaisie():void
{
maSaisieTexte.selectable=true;
}
 


#3 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 464 messages

Posté 14 February 2019 - 21:35 PM

Salut, merci pour ton aide mais hélas pas de changement dans ce sens, je pagine le guide de référence ActionScript pour tenter de trouver une soluce.

#4 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1782 messages

Posté 14 February 2019 - 23:32 PM

tu utilises flash.text.TextField ?

#5 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 464 messages

Posté 15 February 2019 - 08:13 AM

Bonjour pol2095,
Non pas du tout.

#6 paodao

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 7081 messages

Posté 15 February 2019 - 09:05 AM

salut

Voir le messagecortoh, le 15 February 2019 - 08:13 AM, dit :

Non pas du tout.

ba tu utilise quoi alors ?

a+

#7 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 464 messages

Posté 15 February 2019 - 10:02 AM

Bonjour paodao,
Oui, mal exprimé ou mal compris, je veux simplement dire que j'ai mis directement une saisie texte dans mon clip et non crée et importé dans mon clip.

#8 paodao

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 7081 messages

Posté 15 February 2019 - 13:13 PM

salut
une idée comme ca non testé

au mousedown, j'enregistre mouseX et mouseY et j'écoute le mousemove (sur stage) et le mouseup (sur stage aussi)
dans le mousemove je calcul la distance de deplacement de la souris
si le deplacement depasse une limite (peut etre 10px), je desactive le clip (mouseenabled et mousechildren)
au mouseup(sur stage) je retablie le mouseenabled et le mousechildren (voir peut etre dans un timeout a 5ms et j'efface le mousemove et mouseup sur stage

apres j'ai pas testé donc 'a suremet des trucs a affiner ;-)

a+


l'avantage de cette techinique et que des fois quand tu clique sur un champs pour mettre le focus ton doigt bouge légérement (d'ou les 10 pixel)

apres il faudrait voir quand le clavier apparait (au mousedown ou au mouseup)
si c'est le mouseup cela devrait fonctionner, comme tu desactive le clip dans le mousemove, le mouseup ne dvrait plus se faire sur le clip

#9 paodao

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 7081 messages

Posté 15 February 2019 - 13:52 PM

re
ha ba non en faite y'a mieux je pense

Citation

clip que je slide de bas en haut.
donc si tu le slide tu ecoute deja le mousedown, le mousemove et le mouseup
dans le mousemove tu ajoute sur ta scene devant tout le reste un sprite vide de la taille du stage
au mouseup tu le retire
ce sprite empechera tous les mouseup (situé en dessous) de ce produire dans la scene. Cela evitera aussi de cliquer sur des boutons a la fin du slide

a+

#10 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 464 messages

Posté 15 February 2019 - 19:20 PM

Salut paodao, pour la dernière proposition, j'utilise cette astuce assez souvent et principalement quand une action ou animation ce passe et que l'on ne veux pas que l'utilisateur puisse interragir pendant cette période cela dit je n'ais pas testé cette méthode mais je ne pense pas que ça empechera l'ouverture du clavier, je vais toutefois vérifier, sinon je voulais plus de précision sur le "mouseenabled et le mousechildren" j'ai lu plusieurs texte dessus mais j'ai pas vraiment saisie, j'ai testé et reussi à passer ma saisie texte en "mouseenabled = false;" mais je n'ais pas réussi à le repaser en "true".

#11 paodao

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 7081 messages

Posté 15 February 2019 - 20:02 PM

salut

Citation

je ne pense pas que ça empechera l'ouverture du clavier
pour tester regarde quand s'ouvre le clavier: au mousedown ou au mouseup. Pour le faire, sur ton mobile, pose ton doigt sur le champs texte sans le retirer (est ce que le clavier sort), puis retire ton doigt (est ce que le clavier sort, puis teste an appuyant basiquement (est ce que le clavier sort ?)

si le clavier sort des que tu pose le doigt, il y a de forte chance que cela se produise au mousedown, si le clavier sort quand tu retire le doigt, il y'a de forte chance que cela se fasse au mouseup ou au click

dans le cas d'un mouseup ou d'un click, la technique du sprite par dessus lors du mousemove (qui se produit forcement avant le mouseup/click) devrait fonctionner (a tester) puisque l'event mouseup/click ne devrait plus se faire

si cela se fait au mousedown, il faudrait reflechir a un autre systeme

pour le mouseenabled et le mousechildren. Il vont souvent de paire pour desactiver completement les interactions souris sur un sprite et ses enfants

#12 paodao

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 7081 messages

Posté 15 February 2019 - 20:54 PM

re

bon j'ai fait le test sur mon mobile et cela a l'air de fonctionner avec le sprite par dessus le reste
je te joins le fla (c'est du code vite fait pour le test donc a ameliorer)

et si le fla est pas compatible, voici le code

dans le fla
sur la scene
-un clip nommé "clip" avec dedans un champs texte de saisie
-un clip nommé "shield", placé derriere, avec dedans un rectangle de couleur et un alpha à 0.2 pour le test


import flash.events.MouseEvent;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
clip.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler)
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
var starty:Number = 0;
var posy:Number = 0;
var my:Number = 0;
var isMove:Boolean;
var isShield:Boolean;
shield.alpha = 0.2;
function mouseDownHandler(e:MouseEvent){
starty = clip.y;
my =stage.mouseY;
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
}
function mouseMoveHandler(e:MouseEvent){
var y = stage.mouseY;
var dy = y-my;
if(Math.abs(dy)>10){
  isMove = true;
}
if(isMove){
  if(!isShield){
   isShield = true;  
   addChild(shield);
   shield.width = stage.stageWidth;
   shield.height= stage.stageHeight;
  }
  clip.y = starty + dy;
}
}
function mouseUpHandler(e:MouseEvent){
removeChild(shield);
isShield = false;  
stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);

}
 

a+

Fichier(s) joint(s)

  • Fichier joint  air.fla   6.44 Ko   1 téléchargement(s)


#13 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 464 messages

Posté 15 February 2019 - 21:55 PM

Alors pour les premiers essais la présence d'un sprite au dessus fonctionne et le clavier n'apparait effectivement pas car le clavier agit bien au "mousedown" le problème c'est que ça fonctionne même si on a pas slidé.

#14 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 464 messages

Posté 15 February 2019 - 22:02 PM

PS:Mon dernier message ne concerne pas ton dernier poste que je n'avais pas encore lu mais le résultat de mes propre essais sur mon code.

#15 paodao

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 7081 messages

Posté 15 February 2019 - 22:03 PM

salut

Citation

le clavier agit bien au "mousedown"
plutot au mouseup ou au click j'arrive pas trop a voir


avec le fla que j'ai posté, quand j'appui sur le champs de texte, j'ai bien le clavier qui apparait, si je slide en partant du champs, le clavier n'apparait pas.

As tu bien pensé a tester dans le mousemove un minimum de distance a slider avant de mettre le sprite par dessus. Avec le touch il est difficile de ne pas faire un move (genre 1px) apres un down, d'ou le test de distance

a+

#16 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 464 messages

Posté 15 February 2019 - 22:08 PM

Non je n'ais pas encore utilisé le mousemove, je planche dessus en me basant sur ton code.

#17 paodao

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 7081 messages

Posté 15 February 2019 - 22:21 PM

oki

au passage je me demande si pour une question d'ordre d'ecoute des evenements (dans quel ordre sont executés les mouseup sur tous les elements interactifs) il ne serait pas plus sure d'enlever le sprite aprés quelque milliseconde après le mouseup (comme ca il ne reste plus de mouseup dans le pipe) meme si je ne suis pas fan du timeout


function mouseUpHandler(e:MouseEvent){
   stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
   stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
   setTimeout(removeShield, 10);
}

function removeShield():void{
   isShield = false;
   removeChild(shield);
}
 

EDIT: apres reflexion, oui le timeout me semble necessaire, pour eviter les events CLICK qui se produisent apres le mouseup

a+

#18 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 464 messages

Posté 15 February 2019 - 23:12 PM

J'ai testé ça répond bien sur le smartphone, sur le pc dans ton fla il y a un message d'erreur quand tu click sans slider, je ne sais pas si tu as remarqué ?

#19 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1782 messages

Posté 16 February 2019 - 00:14 AM

tu peux essayer

textField.addEventListener( SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATING, onSoftKeyActivating );

function onSoftKeyActivating(event:SoftKeyboardEvent):void
{
        if( sliding ) event.preventDefault()
}


#20 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 464 messages

Posté 16 February 2019 - 08:52 AM

Bonjour,
Enfin finalisé, je suis resté pour le moment sur l'idée de paodao d'utiliser un "mouse_move" et d'importer un sprite vide ce qui permet d'ignorer et de ne pas coder sur les saisie texte ou bouton se trouvant dans le clip slidé à condition biensûr que leurs fonctions soient activés en "mouse_up".

Code final:

var posi_Down;
var posi_Up;
var posi_live;

form_visite.addEventListener(MouseEvent.MOUSE_DOWN, mouse_Down);
form_visite.addEventListener(MouseEvent.MOUSE_UP, mouse_Up);

function mouse_Down(e:MouseEvent):void

{
form_visite.startDrag(false,zoneScroll);
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
}

function mouse_Up(e:MouseEvent):void

{
form_visite.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
form_visite.anti_saisie.visible = false;
}

function mouseMoveHandler(e:MouseEvent)

{
posi_Live = form_visite.y;

if (posi_Live != posi_Down)

{
  form_visite.anti_saisie.visible = true;
}
}
 

Je vais toutefois voir comment fonctionne le "SoftkeyboardEvent" qu'a proposé pol2095.

#21 paodao

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 7081 messages

Posté 16 February 2019 - 09:14 AM

salut

Citation

à condition biensûr que leurs fonctions soient activés en "mouse_up".
si tu regarde mon post juste avant, je retire le sprite apres un setTimeout, comme ca les events click sont aussi gérés

a+

#22 cortoh

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 464 messages

Posté 16 February 2019 - 09:41 AM

Exact, merci paodao ;-)



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP