2012-04-03 2 views
2

У меня есть Activity с кучей EditTexts и кнопки. Когда пользователь нажимает кнопку, в заголовке кнопки появляется ответ, основанный на входе из EditTexts. В обработчике buttonclick я меняю фокус на кнопку, и курсор исчезает с любого фокуса EditText, но мягкая клавиатура остается на экране. Как я могу заставить мягкую клавиатуру исчезнуть?Скрытие мягкой клавиатуры в MonoDroid

EditText1.ClearFocus();  
EditText2.ClearFocus();  
EditText3.ClearFocus(); 
calc_btn.Focusable = true; 
calc_btn.RequestFocus(); 

Я видел несколько ответов о том, как сделать это в Java, но я не мог понять, как перевести их на C#.

Спасибо за любой совет.

ответ

3

Вы можете сделать что-то вроде этого:

var inputManager = (InputMethodManager)GetSystemService(InputMethodService); 
inputManager.HideSoftInputFromWindow(editText.WindowToken, HideSoftInputFlags.None); 
+0

Прекрасно работает, Грег. Большое спасибо. –

+0

Не знаю, почему это не сработало для меня :( – PCoder

1

Полезная информация о this?

Там, кажется, метод здесь:

public override void HideSoftInput (int flags, Android.OS.ResultReceiver resultReceiver)

+0

Я уверен, что этот метод был бы полезен, если бы я мог понять, как его назвать. Это не дает метода, поэтому он не реализуется напрямую: Android.InputMethodServices.InputMethodService.InputMethodImpl. –

+0

Не забудьте принять правильный ответ! :) –

2

Jon O «s ответ выше является совершенным. Вот как вы его используете.

Window.SetSoftInputMode(SoftInput.StateHidden); 
0

Вот полностью рабочий раствор:

using Android.Views.InputMethods; 

yourEditTextObject.EditorAction += (object sender, TextView.EditorActionEventArgs e) => 
     { 
      if (e.ActionId == Android.Views.InputMethods.ImeAction.Done) 
      { 
       var editText = sender as EditText; 
       var inputManager = GetSystemService(InputMethodService) as InputMethodManager; 
       inputManager.HideSoftInputFromWindow(editText.WindowToken, 0); 
      } 
     }; 
2
protected override void OnCreate (Bundle bundle) 
    { 
     base.OnCreate (bundle); 

     SetContentView (Resource.Layout.Main); 

     Button button = FindViewById<Button> (Resource.Id.button1); 
     button.Click+= onClick; 
     EditText es=FindViewById<EditText>(Resource.Id.editText1); 
     es.EditorAction += (object sender, TextView.EditorActionEventArgs e) => 
     { 

      if (e.ActionId == Android.Views.InputMethods.ImeAction.Done) 
      { 
       var editText = sender as EditText; 
       var inputManager = GetSystemService(InputMethodService) as InputMethodManager; 
       inputManager.HideSoftInputFromWindow(editText.WindowToken, 0); 
      } 

     }; 
     EditText es1=FindViewById<EditText>(Resource.Id.editText2); 
     es1.EditorAction += (object sender, TextView.EditorActionEventArgs e) => 
     { 
      if (e.ActionId == Android.Views.InputMethods.ImeAction.Done) 
      { 
       var editText = sender as EditText; 
       var inputManager = GetSystemService(InputMethodService) as InputMethodManager; 
       inputManager.HideSoftInputFromWindow(editText.WindowToken, 0); 
      } 
     }; 



    } 

Я использовал данные методы выше code.I не хотят, чтобы показать мягкую клавиатуру для обоих textboxs.Its не работает , я написал это неправильно?

Смежные вопросы