Закрыть / скрыть мягкую клавиатуру Android в MvxFragment
Я создаю android-приложение с xamarin + mvvmcross. У меня есть MvxAutoCompleteTextView в моем MvxFragment. После записи в MvxAutoCompleteTextView и нажатия на другие элементы управления, я хочу скрыть виртуальную клавиатуру. Я использую этот код
public class MyFragment : MvxFragment
{
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
var view = this.BindingInflate(Resource.Layout.frMy, null);
var autoComplete = view.FindViewById<MvxAutoCompleteTextView>(Resource.Id.acMy);
InputMethodManager inputManager = (InputMethodManager)inflater.Context.GetSystemService(Context.InputMethodService);
inputManager.HideSoftInputFromWindow(autoComplete.WindowToken, HideSoftInputFlags.None);
return view;
}
}
но это не работает. Как скрыть клавиатуру?
4 ответов
попробуйте это:
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
imm.HideSoftInputFromWindow(autoComplete.WindowToken, 0);
значение 0
на HideSoftInputFromWindow
является const Android.Views.InputMethods.HideSoftInputFlags.None
таким образом, вы можете использовать эквивалентный синтаксис:
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
imm.HideSoftInputFromWindow(autoComplete.WindowToken, Android.Views.InputMethods.HideSoftInputFlags.None);
вы можете скрыть мягкую клавиатуру, придающую фокус чему-то, что не является элементом управления "keyboard launcher", например, родительскому контейнеру вашего автозаполнения.
parentContainer = FindViewById<LinearLayout>(Resource.Id.parentContainer);
parentContainer.RequestFocus();
допустим, ваш родительский контейнер является LinearLayout, вы должны позволить ему получить фокус с этими 2 свойствами:
<LinearLayout
android:id="@+id/parentContainer"
android:focusable="true"
android:focusableInTouchMode="true">
Я получил ответ на java отсюда:https://stackoverflow.com/a/28939113/4664754
вот версия C# (протестирована и работает):
public override bool DispatchTouchEvent(MotionEvent ev)
{
if (ev.Action == MotionEventActions.Down)
{
View v = CurrentFocus;
if (v.GetType() == typeof(EditText))
{
Rect outRect = new Rect();
v.GetGlobalVisibleRect(outRect);
if (!outRect.Contains((int)ev.RawX, (int)ev.RawY))
{
v.ClearFocus();
InputMethodManager imm = (InputMethodManager)this.GetSystemService(Context.InputMethodService);
imm.HideSoftInputFromWindow(v.WindowToken, 0);
}
}
}
return base.DispatchTouchEvent(ev);
}
этот фрагмент кода скроет мягкую клавиатуру, Если вы нажмете на что-либо, что не является EditText. Вам просто нужно вставить это в свой класс активности (например, ваш loginActivity)
попробуй мою функцию:
public static void Close_AndroidKeyboard(Activity context){
InputMethodManager inputManager = (InputMethodManager) context.getSystemService(
Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(context.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
Извините, но я работаю с Android studio, скажите мне, если я помог вам и хорошее Программирование!