2015-08-13 104 views
0

隐藏软键盘很痛苦。 我使用了一些基于获取焦点的EditText的方法,但在我的当前应用程序中,键盘会在加载新片段的某个点弹出。从任何地方隐藏软键盘

我有一个方法,在我的助手类,但它不为我工作:

//Hide keyboard 
    public static void hideSoftKeyboard(Activity activity) { 
     activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
    } 

我会爱是一个辅助方法,我可以从任何地方调用来隐藏软键盘。这是可能的,还是我总是需要找到关注的EditText?

+1

清单中'机器人试试这个:windowSoftInputMode =“stateHidden”' – Emil

回答

3

做这样的事情传递activity..it任何的EditText ID将为该activty

public static void hideSoftKeyboard(Activity activity, EditText editText) { 
     InputMethodManager imm = (InputMethodManager) activity.getSystemService(
       Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); 
    } 
+0

你的意思是,你可以添加一个虚拟/隐藏的EditText到活动并用它来隐藏键盘?即使它最初是由另一个EditText添加的? – TomCB

+0

是的.. !!! –

+0

这个技巧就像一个魅力!非常感谢! – TomCB

0

在AndroidManifest.xml中:

<activity android:name="com.your.package.ActivityName" 
      android:windowSoftInputMode="stateHidden" /> 

此设置在用户进入新的活动将隐藏软键盘(即使控制的EditText收益焦点)。软键盘仅在用户单击编辑框控件时才会显示。

0

与此

public static void hideAllKeyboard(Activity activity) 
{ 
    View view = activity.getCurrentFocus(); 
    if (view != null) { 
     InputMethodManager imm = (InputMethodManager)activity.getSystemService(
       Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 
    } 
} 
1

试试使用该代码的工作(发现它在互联网茹段Habra Habr

public void showSoftInputOnFocusCompat(boolean isShow) { 

    showSoftInputOnFocus = isShow; 
    if (Build.VERSION.SDK_INT >= 21) { 
     setShowSoftInputOnFocus(showSoftInputOnFocus); 
    } else { 
     try { 
      final Method method = EditText.class.getMethod("setShowSoftInputOnFocus", boolean.class); 
      method.setAccessible(true); 
      method.invoke(this, showSoftInputOnFocus); 
     } catch (Exception e) { 
      // ignore 
     } 
    } 
} 
0

使用本

public void hideSoftKeyboard(Activity context) 
{ 
    InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE); 
    inputMethodManager.hideSoftInputFromWindow(context.getCurrentFocus().getWindowToken(), 0); 
} 
0

适合我这种方法:

* First create a derivated class from Entry 

    public class KBLessEntry : Entry 
    { 
    public KBLessEntry() : base() 
    { 
    } 
    } 

* Then create a custom platform EntryRender 

    using Xamarin.Forms.Platform.Android; 
    using Xamarin.Forms; 
    using MobileClients.Droid.Core; 
    using Android.Views.InputMethods; 
    using System; 
    using System.ComponentModel; 

[assembly: ExportRenderer(typeof(KBLessEntry), typeof(KBLessEntryRender))] 
namespace MobileClients.Droid.Core 
{ 
    public class KBLessEntryRender : EntryRenderer 
    { 
     protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) 
     { 
      base.OnElementPropertyChanged(sender, e); 
      Control.InputType = 0; 
      try 
      {    
       // Hide keyboard 
       InputMethodManager inputMethodManager = this.Control.Context.GetSystemService(Android.Content.Context.InputMethodService) as InputMethodManager; 
       if (inputMethodManager != null) 
       { 
        inputMethodManager.HideSoftInputFromWindow(this.Control.WindowToken, HideSoftInputFlags.None); 
       } 
      } 
      catch(Exception Ex) 
      { 

      } 
     } 

    } 
} 

而在XAML

<local:KBLessEntry x:Name="TxtCode" FontSize="18" Placeholder="Código producto" TextColor="Black" HorizontalOptions="FillAndExpand"></local:KBLessEntry> 

地方:必须定义在XAML中的xmlns的命名空间:地方=“CLR的命名空间:MobileClients .Droid.Core;程序集= MobileClients.Droid“

而那就是它

0

尝试调用这个方法: setShowSoftInputOnFocus(false); 对我来说,它的工作好:

public class CustomKeyboardField extends android.support.v7.widget.AppCompatEditText { 


    public CustomKeyboardField(Context context) { 
     super(context); 
     init(); 
    } 

    public CustomKeyboardField(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public CustomKeyboardField(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(); 
    } 

    private void init() { 
     setShowSoftInputOnFocus(false); 
     setCursorVisible(false); 
    } 
}