3

我有一个带有一堆 EditTexts 和一个按钮的 Activity。当用户单击按钮时,基于 EditTexts 输入的答案会出现在按钮的标题中。在 buttonclick 处理程序中,我将焦点更改为按钮,光标从 EditText 具有焦点的任何内容中消失,但软键盘仍保留在屏幕上。如何强制软键盘消失?

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

我已经看到了几个关于如何在 Java 中执行此操作的答案,但我无法弄清楚如何将它们转换为 C#。

感谢您的任何建议。

4

5 回答 5

3

你可以这样做:

var inputManager = (InputMethodManager)GetSystemService(InputMethodService);
inputManager.HideSoftInputFromWindow(editText.WindowToken, HideSoftInputFlags.None);
于 2012-04-03T20:44:02.443 回答
2

Jon O上面的回答是完美的。这就是你使用它的方式。

Window.SetSoftInputMode(SoftInput.StateHidden);
于 2013-01-03T09:12:34.457 回答
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);
            }
        };



    }

我在上面的代码中使用了给定的方法。我不想显示两个文本框的软键盘。它不起作用,我写错了吗?

于 2013-02-06T12:30:27.770 回答
1

这对有用吗?

这里似乎有一个方法:

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

于 2012-04-03T20:31:54.510 回答
1

这是一个完全可行的解决方案:

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);
            }
        };
于 2013-02-06T10:32:36.340 回答