2016-04-11 6 views
1

Wie kann ich mit kurzen und langen Tastenklicks umgehen? Ich benötige eine bestimmte Aktion für einen kurzen Knopfklick und eine spezifische Aktion für einen langen Knopfklick. Ich habe über den Gesture Listener gelesen und versucht, ihn in die Android MainActivity.cs-Datei (MainActivity-Klasse) zu implementieren. Aber ich habe eine Ausnahme, wenn die Anwendung ausgeführt wird.Wie man kurze und lange Tastenklicks behandelt

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="Test.Page"> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="100"/> 
    </Grid.RowDefinitions> 
    <ListView x:Name="MyButton" Grid.Row="0" /> 
    <ScrollView Orientation="Horizontal" Grid.Row="1"> 
     <Label x:Name="MyLabel" HorizontalOptions="Center">...</Label> 
    </ScrollView> 
    </Grid> 
</ContentPage> 
+0

Möglicherweise möchten Sie auch das Xamarin.Forms Tag zu diesem Beitrag hinzufügen. Bitte posten Sie auch alle Ausnahmen, auf die Sie innerhalb Ihrer Frage stoßen. Es gibt auch ein einfaches Tutorial hier: http://arteksoftware.com/gesture-recognizers-with-xamarin-forms/ –

Antwort

3

Um dies zu tun, könnten Sie einen benutzerdefinierten Renderer für die Schaltfläche verwenden. Jede Plattform hat ihre eigene Art, mit einer langen Geste umzugehen, die derzeit nicht über die Schaltfläche "Formulare" verfügbar ist.

Auf Android:

[assembly: Xamarin.Forms.ExportRenderer (typeof (MyButton), typeof (MyButtonRenderer))] 
namespace MyApp.Android 
{ 
    public class MyButtonRenderer : ButtonRenderer 
    { 
     protected override void OnElementChanged (ElementChangedEventArgs<global::Xamarin.Forms.Button> e) 
       { 
        base.OnElementChanged (e); 
        if (e.OldElement == null) { 
         var nativeButton = Control; 
         nativeButton.LongClick += delegate { 
          //Do something 
         }; 
        } 
       } 
    } 
} 

iOS:

[assembly:ExportRenderer (typeof(ButtonWithLongPressGesture), typeof(LongPressGestureRecognizerButtonRenderer))] 
namespace SampleApp.iOS 
{ 
    public class LongPressGestureRecognizerButtonRenderer : ButtonRenderer 
    { 
     ButtonWithLongPressGesture view; 

     public ButtonPressGestureRecognizerImageRenderer() 
     { 
      this.AddGestureRecognizer (new UILongPressGestureRecognizer ((longPress) => { 
       if (longPress.State == UIGestureRecognizerState.Began) { 
        view.HandleLongPress(view, new EventArgs()); 
       } 
      })); 
     } 

     protected override void OnElementChanged (ElementChangedEventArgs<Button> e) 
     { 
      base.OnElementChanged (e); 

      if (e.NewElement != null) 
       view = e.NewElement as ButtonWithLongPressGesture; 
     } 
    } 
} 
+0

Danke für die Antwort! Aber wie funktioniert es mit Button, der in XAML platziert wurde (ich muss irgendwo Referenzen dazu schreiben oder nicht)? Wann hat dieser Code angerufen? Danke noch einmal! – Evgeniy175

+0

Sie würden es wie jedes benutzerdefinierte Steuerelement verwenden. In diesem Leitfaden zum Erstellen und Verwenden eines benutzerdefinierten Renderers https://developer.xamarin.com/guides/xamarin-forms/custom-renderer/entry/ – QiMata

+0

funktioniert es. Vielen Dank! – Evgeniy175

Verwandte Themen