l'écran style lorsque le clavier virtuel est actif

idéalement, je voudrais que l'interface entière ait un style personnalisé qui est vu sur l'ios (itouch / ipad) ou équivalent android avec le clavier virtuel présent. Voir ci-dessous pour plus de détails.

un ensemble personnalisé de règles de piratage CSS pour être actif, lorsque le clavier est" présent", est également une solution acceptable.

cible androïdes et ios, sur un site Web (HTML / JavaScript/CSS) Notez également que la disposition à l'intérieur est: "fluide".

Edit: C'était plus design, puis texte; donc les changements ne sont pas désorientants. Au niveau le plus bas, je souhaite juste un changement de design avec et sans les touches virtuelles (peut-être juste un changement de fond).

La question, c'est une bonne ou une mauvaise idée de conception, est discutable. Cependant, je pense, est sans pertinence pour la question. Pour un tel exploit peut utiliser plus que du texte (comme des jeux ou des médias interactifs).

D'où le bounty: bien que n'ayant plus besoin de réponse pour le projet sur lequel je travaillais (une conception alternative a été utilisée). Je pense toujours qu'il peut être utile de répondre à cette question.

Comportement Par Défaut

                       +--------+ 
                       |        |
+------------+       +-+-hidden-+-+   <- ~50% hidden
| +--------+ |       | +--------+ |
| |        | |       | |visible | |
| |        | |      | |        | |   <- ~50% visible
| |  100%  | |  ==>  | +--------+ |
| |        | |   /   | |virtual | |
| |        | |       | |  keys  | |
| +--------+ |       | +--------+ |
+------------+       +------------+

Comportement Désiré

+------------+       +------------+   
| +--------+ |       | +--------+ |
| |        | |       | |visible | |   <- 100% visible (example styling)
| |        | |      | |        | |      Custom Styling
| |  100%  | |  ==>  | +--------+ |
| |        | |   /   | |virtual | |
| |        | |       | |  keys  | |
| +--------+ |       | +--------+ |
+------------+       +------------+
56
demandé sur PicoCreator 2011-12-19 07:53:58

4 réponses

je ne suis pas sûr, est-ce l'effet désiré?. voir ce lien

http://jsfiddle.net/UHdCw/3 /

mise à Jour

(1). En supposant que c'est un site web et en cours d'exécution sur le navigateur de périphérique. Ensuite, nous pouvons vérifier la présence d'un clavier virtuel en vérifiant la taille de l'écran.

Vérifier dans le navigateur de votre appareil, - http://jsfiddle.net/UHdCw/8/show/

code: - http://jsfiddle.net/UHdCw/8 /

(2). Si vous construisez natif app avec HTML5 & Phonegap, les choses seront différentes. Comme il n'y a pas de crochet D'API direct pour vérifier l'état des claviers, nous devons écrire notre propre plugin dans Phonegap.

dans Android, vous pouvez vérifier l'état show/hide du clavier en utilisant le code natif [ vérifier ici ]. et ont pour Ecrire le plugin Phonegap pour obtenir ces événements dans notre HTML.

[Phonegap en est un exemple. Je pense que la plupart des cadres html à natif ont ce genre de felicity à accrocher avec le code natif]

mise à jour d'iOS

comme vous l'avez dit, il n'y a pas de changement de hauteur/position lorsque le clavier est présent. Nous pouvons faire une chose, quand input obtient la mise au point nous pouvons ajouter la classe de rétrécissement et de réduire les tailles des éléments. Vérifier le lien suivant.

http://jsfiddle.net/UHdCw/28/show /

19
répondu Praveen Vijayan 2017-05-23 12:02:35

j'ai rencontré le même problème, cela fonctionne pour moi:

<!-- Android Viewport height fix-->
<script type="text/javascript">
var isAndroid = navigator.userAgent.toLowerCase().indexOf("android") > -1; //&& ua.indexOf("mobile");
if(isAndroid) {
    document.write('<meta name="viewport" content="width=device-width,height='+window.innerHeight+', initial-scale=1.0">');
}
</script> 
11
répondu benone 2014-01-27 07:08:44

ont JavaScript appliquer une classe au corps quand un élément d'entrée a focus .

$("input, textarea").focus(function(){  $(document.body).addClass('when-keyboard-showing');     });
$("input, textarea").blur( function(){  $(document.body).removeClass('when-keyboard-showing');  });

puis utiliser @media requêtes pour déterminer si mobile view:

@media (max-width:550px) { 
    body.when-keyboard-showing .header { height:0; padding:0; }
}

La combinaison vous permettra de styliser la page lorsque le clavier est en place, sur mobile. Remercier.

8
répondu redolent 2018-08-01 09:58:22

j'ai le problème exact. Voici ma solution pour L'instant, j'apprécierais si quelqu'un pouvait tester sur Apple: http://jsfiddle.net/marcchehab/f2ytsu8z/show (pour voir le code source et tout: http://jsfiddle.net/marcchehab/f2ytsu8z )

I détecter s'ils clavier est sorti de la manière suivante: lors du chargement, Je calcule une variable" sumedges", qui est $(Fenêtre).width () + $(window).hauteur.)( Puis, dans le cas de $(window).redimensionner () je compare: si la somme $(fenêtre).width () + $(window).hauteur() est devenu plus petit que "sumedges", cela signifie que le clavier est. Cela fonctionne ici sur Chrome sur Android. Vous pouvez facilement modifier ce code pour faire ce que vous voulez.

var sumedges = $(window).width() + $(window).height();
$(window).resize(function(){
    if($(window).width() + $(window).height() < sumedges) {
    $("#display").html("keyboard out");
  } else {
    $("#display").html("keyboard in");
  }
});

en utilisant jQuery, je n'ai trouvé aucun moyen de forcer une transition en douceur lorsque vous cliquez sur une entrée et que le clavier s'ouvre. mais il est peut-être possible de tromper le système: dans le violon, je mettre en place un faux de saisie (bleu). Lorsque vous cliquez dessus, l'entrée réelle apparaît juste au-dessous de mon affichage (jaune) et est sélectionnée. De cette façon, tout semble lisse ici sur Chrome sur Android. Encore une fois, j'apprécierais si vous pouviez tester.

$("#fakeinput").click(function(){
    $("#realinput").show().children("input").focus();
  $("html,body").scrollTop($("#display").offset().top);
});

$("#realinput input").blur(function(){
    $("#realinput").hide();
});
0
répondu Marc Chéhab 2018-07-26 19:23:44