Utilisation de formulaires Xamarin, considérez le XAML ci-dessous.
<StackLayout VerticalOptions="FillAndExpand"> <Image x:Name="cameraImage" Source="camera.png" /> <Label Text="Describe the image" /> <Editor /> <Button Text="Save" /> </StackLayout>
6 Réponses :
Pour faire défiler automatiquement pour les éditeurs et les entrées avec XAMARIN.FORMS, vous devez généralement faire votre point de vue, dans ce cas, la StackLayout, dans un ScrollView: C'est ce que c'est supposé Pour travailler, mais à compter d'aujourd'hui (juin 2014), un bogue empêche cela de travailler pleinement avec l'éditeur (cela fonctionne bien avec les entrées). Le problème est connu et est travaillé sur. P> [Mise à jour 2014-11-20] Le problème a été adressé et sera disponible dans la prochaine version de XF 1.3 P> P> P> >
Cela ne fonctionnera pas bien si vous avez une liste de réception à l'intérieur. Mélanger Scrolleviews avec ListViews va gâcher l'événement Drag
Comme @navyseal et Falko ont écrit - ce n'est pas une meilleure pratique d'intégrer le défilement à l'intérieur du défilement (non seulement sous forme). Cela ne fonctionnera pas pour les claviers non standard tels que Emoji ou 3e Parti (comme Swiftkey)
Je viens de tomber sur cette question lors de la rédaction d'une minuscule application de discussion, qui contient essentiellement une liste de messages défilable, une entrée de texte et un bouton d'envoi:
p>
Le problème de la solution précédemment postée est que vous auriez besoin de nichoir deux Vues de défilement, qui n'est pas recommandée par le Xamarin.Forms Documentation a>. Pour empêcher le clavier de cacher l'entrée, j'ai trouvé le piratage suivant: p> J'ajoute un espace réservé code> à la fin de la disposition de la pile principale. Selon si l'entrée est concentrée (c'est-à-dire que le clavier est visible ou non) la hauteur de l'espace réservé est réglée sur 0 ou la hauteur du clavier. P> bien sûr, c'est pas parfait. Surtout la hauteur du clavier codé dur doit être mise en œuvre plus élégamment. Et vous devriez probablement l'appliquer sur iOS uniquement, pas sur Android. P> P>
Élargir sur la réponse à partir de @falko, vous pouvez vérifier la plate-forme pour iOS depuis que Android gère cela comme prévu de manière native.
J'ai également ajouté ceci à la page pour une orientation rapide et sale via Cette réponse . P>
protected async void Message_Focused(object sender, EventArgs args) { if (Device.OS == TargetPlatform.iOS) { //TLR: still need a way to determine the iOS keyboard's height first //until then, this is a functional hack if (IsPortrait(this)) { KeyboardSpacer.HeightRequest = 165; } else { KeyboardSpacer.HeightRequest = 114; } } } protected async void Message_Unfocused(object sender, EventArgs args) { if (Device.OS == TargetPlatform.iOS) { KeyboardSpacer.HeightRequest = 0; } }
Parfois, vous ne pouvez pas mettre votre point de vue principal dans une vision de Scroll, dans ces cas, vous pouvez la mettre en œuvre en manipulant les événements du clavier, le projet iOS et les transmettent au niveau des formes. Android prend soin de soi-même. au niveau des formulaires: P> bottomOffset = mainStack.Bounds.Bottom - textStack.Bounds.Bottom;
textStack.TranslationY -= e.Visible ? e.Height - bottomOffset : bottomOffset - e.Height;
Très belle solution daniel
C'est une excellente solution. Cependant, il ne compte pas que les claviers matériels soient présents. : - \
Soyez prudent, le Suskakeyboard CODE> a été simplement implémenté pour une entrée de l'application, si vous ajoutez une nouvelle entrée, le
KeyboardHelper.KeyboardCommandé code> va tirer dessus, quand le L'accent est dans n'importe quelle entrée.
KeyboardHelper.KeyboardChanged += (sender, e) =>{
bottomOffset = this.ParentView.Bounds.Bottom - _editor.Bounds.Bottom;
if (KeyboardStatus)
_editor.TranslationY = e.Visible ? -(e.Height - bottomOffset) : 0;
else
_editor.TranslationY = 0;
};
Utiliser ScrollView comme mentionné ci-dessus corrige le problème dans IOS et corrige partiellement dans Android. Pour résoudre complètement le problème dans Android, j'ai trouvé un autre ajout simple et agréable.
uniquement dans Android I remplace l'éditeur de formulaires Xamarin avec un contrôle de texte spécifique Android. Donc, dans mon constructeur de page, j'ai suivi du code juste pour Android. P>
#if __ANDROID__ using Xamarin.Forms.Platform.Android; using Android.Widget; using Button = Xamarin.Forms.Button; using Android.Text; #endif