11
votes

Éditeur de défilement dans les formes Xamarin en vue

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>


0 commentaires

6 Réponses :


8
votes

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: XXX

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.

[Mise à jour 2014-11-20] Le problème a été adressé et sera disponible dans la prochaine version de XF 1.3 >


2 commentaires

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)




1
votes

É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;
    }
}


0 commentaires

5
votes

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. XXX PRE>

au niveau des formulaires: P>

bottomOffset = mainStack.Bounds.Bottom - textStack.Bounds.Bottom;
textStack.TranslationY -= e.Visible ? e.Height - bottomOffset : bottomOffset - e.Height;


2 commentaires

Très belle solution daniel


C'est une excellente solution. Cependant, il ne compte pas que les claviers matériels soient présents. : - \



0
votes

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;
};


0 commentaires

0
votes

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


0 commentaires