2015-08-13 1 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

ли что-то подобное передавать любые EditText идентификатор этого activity..it будет работать для этого 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

Try с этим

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