0

In einer Xamarin Forms App versuche ich eine benutzerdefinierte Entry Implementierung zu erstellen, die nicht automatisch die Soft-Tastatur anzeigt, wenn es fokussiert ist. Das Ziel besteht darin, eine Instanz dieses Eintrags neben anderen herkömmlichen Einträgen auf einer Seite zu verwenden.Xamarin Forms benutzerdefinierte Entry-Renderer, der weiche Tastatur versteckt

Ich bin vertraut mit dem empfohlenen Xamarin Forms Muster für benutzerdefinierte Ansicht Rendering und erfolgreich sowohl den Eintrag und seine Renderer erstellt, wie folgt:

public class BlindEntry : Entry 
{ 
} 

[assembly: ExportRenderer(typeof(BlindEntry), typeof(BlindEntryRenderer))] 

public class BlindEntryRenderer : EntryRenderer 
{ 
    protected override void OnElementChanged(ElementChangedEventArgs<Entry> e) 
    { 
     base.OnElementChanged(e); 

     if (Control != null) 
     { 
      Control.FocusChange += Control_FocusChange; 
     } 
    } 

    private void Control_FocusChange(object sender, FocusChangeEventArgs e) 
    { 
     if (e.HasFocus) 
     { 
      // What goes here? 
     } 
     else 
     { 
      // What goes here? 
     } 
    } 
} 

die Soft-Tastatur ein- und ausblenden, stelle ich mir ein Die Empfehlungen von this question werden die Lösung liefern, aber es gibt viele verschiedene Meinungen darüber, welcher der beste Ansatz ist. Auch nachdem ich ein passendes Muster gewählt habe, weiß ich nicht, wie ich auf die erforderlichen nativen Android-APIs innerhalb des oben genannten benutzerdefinierten Renderers zugreifen kann.

Zum Beispiel, ich weiß, dass ich einen Verweis auf ein InputMethodManager mit dem folgenden Aufruf (innerhalb einer Activity) erhalten kann, aber es ist nicht klar, wie aus dem Inneren der Renderer die enthält Aktivität zu verweisen:

var imm = GetSystemService(InputMethodService) 

Vielen Dank im Voraus für Ihre Vorschläge.

Tim

Antwort

0

Versuchen Sie stattdessen innerhalb OnElementChanged():

Control.InputType = Android.Text.InputTypes.Null; 

Dies wird die Tastatur erscheinen verhindern, wenn Sie den Eintrag markieren, ohne den Fokus zu überprüfen zu haben.

=== bearbeiten ===

Es stellte sich heraus dort ist eigentlich die ShowSoftInputOnFocusproperty verfügbar genau dies zu tun.

Control.ShowSoftInputOnFocus = false; 
+0

Dies sieht wie eine sehr elegante Lösung aus, aber die Zuordnung wird ignoriert. Wenn ich einen Haltepunkt sofort nach dem Festlegen der InputType-Eigenschaft festlegen, kann ich sehen, dass es auf Android.Text.InputTypes.DatetimeVariationNormal festgelegt ist. –