Ausblenden softkeyboard in Xamarin
Wie Verstecke ich das softkeyboard für die Ansicht auf, wenn man sich ein Entry
in Xamarin.Formen portable forms-Projekt? Ich nehme an, wir schreiben müssen Plattform-spezifische Renderer, aber der folgende Code funktioniert nicht:
Erstelle ich meinen eigenen Eintrag: Unterklasse:
public class MyExtendedEntry : Entry
{
}
und dann in die xamarin.android-Projekt mein renderer:
public class MyExtendedEntryRenderer : EntryRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (Control != null)
{
new Handler().Post(delegate
{
var imm = (InputMethodManager)Control.Context.GetSystemService(Context.InputMethodService);
var result = imm.HideSoftInputFromWindow(Control.WindowToken, 0);
});
}
}
}
Den OnElementChanged
aufgerufen wird, wie erwartet, und bei der Verwendung von Handler.Post()
ich bekomme auch ein WindowToken anstelle von null. Leider ist der Rückgabewert von HideSoftInputFromWindow
ist immer falsch und das softkeyboard noch immer auftaucht, wenn Sie auf den Eintrag.
Du musst angemeldet sein, um einen Kommentar abzugeben.
OnElementChanged
wird aufgerufen, wenn die view initialisiert ist und an dem Blick. Was Sie tun möchten, um die Tastatur auszublenden, wenn der Eintrag geklickt wird, so sollten Sie einen Ereignishandler hinzufügenFocusChange
zu denControl
.Beispiel:
Update: Kombinierte Antwort von @Vikram
Update: Hinzugefügt
Click
event-handlerresult
ist immer noch falsch und die Tastatur wird angezeigt.Click
event-handler. Ich habe versucht, auf meinem Note 3 und es funktioniert undTrue
zurückgegeben.Hinweis: ich bin nicht bewandert in Xamarin.
Meiner Erfahrung, mit
imm.HideSoftInputFromWindow(Control.WindowToken, 0)
sofort, nachdem das Steuerelement den Fokus erhält, produziert dodgy Ergebnisse, selbst bei Verwendung vonPost
. Ich habe Erfolg mitPostDelayed
statt. Die Verzögerung, die ich benutze ist 500ms.Geben diesem einen Versuch:
Den Schlüssel, um zu verhindern, dass die virtuelle Tastatur angezeigt wird, ist das überschreiben der Focus () - Methode den Eintrag und rufen Sie die base-Methode. Sonst wird es immer die gelegentlich erscheinen, egal was Sie tun. Dies hat den zusätzlichen Vorteil der Vereinfachung der code, da Sie automatisch die Kontrolle über das Aussehen und die disapperarnce der virtuellen Tastatur. Ich habe nicht gefunden, keine negativen Nebeneffekte dieser Ansatz so weit.
Habe ich eine Probe control die volle Kontrolle über die virtuelle Tastatur und eine kleine app, die zeigt die Verwendung.
Da diese Frage in mehreren Foren habe ich beschlossen Schreibe lieber eine ausführliche Readme-Datei an das Projekt, erklärt, dass alle wichtigen Punkte der Umsetzung, statt Sie zu duplizieren die Erklärung in verschiedenen Foren. Ich hoffe, dass ist okay. Wenn nicht, lassen Sie es mich bitte wissen.
Das ganze Projekt ist hier verfügbar:
https://github.com/UweReisewitz/XamarinAndroidEntry