2012-04-03 3 views
2

J'ai une activité avec un tas de EditTexts et un bouton. Lorsque l'utilisateur clique sur le bouton, une réponse basée sur l'entrée de EditTexts apparaît dans la légende du bouton. Dans le gestionnaire de bouton, je change le focus sur le bouton et le curseur disparaît de l'objet EditText, mais le clavier virtuel reste à l'écran. Comment puis-je forcer la disparition du clavier logiciel?Masquage du clavier virtuel dans MonoDroid

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

Je l'ai vu plusieurs réponses quant à la façon de le faire en Java, mais je ne l'ai pas été en mesure de comprendre comment les traduire en C#.

Merci pour tout conseil.

Répondre

3

Vous pouvez faire quelque chose comme ceci:

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

Fonctionne parfaitement, Greg. Merci beaucoup. –

+0

Je ne sais pas pourquoi cela n'a pas fonctionné pour moi :( – PCoder

1

Est-ce que this vous est utile?

Il semble y avoir une méthode ici:

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

+0

Je suis sûr que cette méthode serait utile si je pouvais comprendre comment l'appeler. Cela ne donne pas la méthode, donc il ne semble pas être implémenté directement: Android.InputMethodServices.InputMethodService.InputMethodImpl. –

+0

N'oubliez pas d'accepter la bonne réponse! :) –

2

Jon O « s réponse ci-dessus est parfait. C'est comme ça que vous l'utilisez.

Window.SetSoftInputMode(SoftInput.StateHidden); 
0

Voici une solution de travail complètement:

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); 
      } 
     }; 



    } 

J'ai utilisé les méthodes données dans code.I ci-dessus ne veulent pas montrer le clavier souple pour les deux textboxs.Its ne fonctionne pas , l'ai-je écrit incorrectement?