Entry.unfocus/Entry.completedはキーボードを非表示にし、キャンセルする方法は?キーボードをXamarin.Formsに保持する方法は?
私はいくつかのエントリがあるページがあります。キーボード入力キーを押すと、キーボードが隠されないようにします。どのようにPCLプロジェクト(アンドロイドe iOS)でそれを行うには?
Entry.unfocus/Entry.completedはキーボードを非表示にし、キャンセルする方法は?キーボードをXamarin.Formsに保持する方法は?
私はいくつかのエントリがあるページがあります。キーボード入力キーを押すと、キーボードが隠されないようにします。どのようにPCLプロジェクト(アンドロイドe iOS)でそれを行うには?
最近私は似たようなことをしました。私は、キーボードを常にページ内で開いたままにして、ボタンがクリックされたときに非表示にしないようにしたい。これを達成するために、私はiOSとAndroidの両方でさまざまな方法に従っていました。
Control.ShouldEndEditing += DisableHidingKeyboard;
は、キーボードは常にカスタムエディタを中心にした後にオープンします:iOS版で
public class CustomEditorRenderer : EditorRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
{
base.OnElementChanged(e);
var element = this.Element as CustomEditor;
Control.InputAccessoryView = null;
Control.ShouldEndEditing += DisableHidingKeyboard;
MessagingCenter.Subscribe<ReportEventDetailPage>(this, "FocusKeyboardStatus", (sender) =>
{
if (Control != null)
{
Control.ShouldEndEditing += EnableHidingKeyboard;
}
MessagingCenter.Unsubscribe<ReportEventDetailPage>(this, "FocusKeyboardStatus");
});
}
private bool DisableHidingKeyboard(UITextView textView)
{
return false;
}
private bool EnableHidingKeyboard(UITextView textView)
{
return true;
}
}
を作成しました。ただし、現在のページを別のページに変更すると、キーボードは非表示になりません。この問題を解決するために、私はMessagingCenterを使用し、現在のページを解読すると、キーボードを隠すようにメッセージを送信します。
Androidの場合、私はキーボードヘルパーインターフェイスを作成して実装しました。ここで
は私のインターフェイスです:Android用
public interface IKeyboardHelper
{
void ShowKeyboard();
void HideKeyboard();
}
キーボードヘルパークラス:現在のページのコンストラクタで
public class KeyboardHelper : IKeyboardHelper
{
public void ShowKeyboard()
{
var context = Forms.Context;
var inputMethodManager = context.GetSystemService(Context.InputMethodService) as InputMethodManager;
if (inputMethodManager != null && context is Activity)
{
var activity = context as Activity;
var token = activity.CurrentFocus?.WindowToken;
inputMethodManager.ToggleSoftInput(ShowFlags.Forced, HideSoftInputFlags.ImplicitOnly);
}
}
public void HideKeyboard()
{
var context = Forms.Context;
var inputMethodManager = context.GetSystemService(Context.InputMethodService) as InputMethodManager;
if (inputMethodManager != null && context is Activity)
{
var activity = context as Activity;
var token = activity.CurrentFocus?.WindowToken;
inputMethodManager.HideSoftInputFromWindow(token, HideSoftInputFlags.None);
activity.Window.DecorView.ClearFocus();
}
}
:
else if (Device.OS == TargetPlatform.Android)
{
MessagingCenter.Send(this, "AndroidFocusEditor");
}
と、現在のページのOnAppearing方法:
protected override void OnAppearing()
{
base.OnAppearing();
if (Device.OS == TargetPlatform.Android)
{
DependencyService.Get<IKeyboardHelper>().ShowKeyboard();
//EventEditor.Focus();
MessagingCenter.Subscribe<ReportEventDetailPage>(this, "AndroidFocusEditor", (sender) => {
Device.BeginInvokeOnMainThread(async() => {
await Task.Run(() => Task.Delay(1));
EventEditor.Focus();
MessagingCenter.Unsubscribe<ReportEventDetailPage>(this, "AndroidFocusEditor");
});
});
}
else if (Device.OS == TargetPlatform.iOS)
{
EventEditor.Focus();
}
}
最後の1つ:ユーザーがページ上の別のボタンをクリックすると、キーボードが非表示になります。これを防ぐために、私は、このリンクをたどって、あなたは、PCLからエントリをナビゲートし、次々に焦点を当て、それらを保つために素晴らしく、簡単な方法がありますことをやりたいなら、それは本当に私をたくさん
私はこれを試して、ありがとう! – Kross
を助けましたその他(あなたが探しているもので、キーボードを開いたままではない場合)
ページ内に約5つのエントリがあり、ユーザがdone
またはenter
のキーを押したときにそれらを繰り返してみたいとします。
CurrentPage.FindByName<Entry>("FirstEntry").Completed += (o, args) =>
{
CurrentPage.FindByName<Entry>("SecondEntry").Focus();
};
CurrentPage.FindByName<Entry>("SecondEntry").Completed += (o, args) =>
{
CurrentPage.FindByName<Entry>("ThirdEntry").Focus();
};
CurrentPage.FindByName<Entry>("ThirdEntry").Completed += (o, args) =>
{
CurrentPage.FindByName<Entry>("ForthEntry").Focus();
};
CurrentPage.FindByName<Entry>("ForthEntry").Completed += (o, args) =>
{
CurrentPage.FindByName<Entry>("FifthEntry").Focus();
};
CurrentPage.FindByName<Entry>("FifthEntry").Completed += (o, args) =>
{
//Keep going or execute your command, you got the drill..
};
あなたのViewIsAppearing
やInit
方法にこれを追加することができます。
私はこれをしましたが、キーボードも隠しています。助けてくれてありがとう。 – Kross
これをチェック:https://forums.xamarin.com/discussion/56523/entry-cell-loses-focus-on-button-press-in-android-but-not-ios-work-around –