2017-06-26 13 views
0

私は多くのEditTextを持つアクティビティを書いています。奇妙なAndroidソフトキーボードの問題

inputTypeはnumericDecimalです。このように:Before I click

今、私はEditTexts以外のどこかをクリックすると、ソフトキーボードを非表示にしたいので、私は置く:

public void hideKeyboard(View mView) { 
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService 
      (Activity.INPUT_METHOD_SERVICE); 
    inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
} 

を、私はどこか別の場所をクリックした後、numericDecimalソフトキーボードが消えます。 いつもには、画面上に残った自動補完のない一般的なソフトキーボードがあります。どこから来たのかわからないのです。表示:After I click

どのようにすべてを非表示にするには?インターネット上の一般的な方法は機能しません、私はそれらをすべて試しました。

ありがとうございます!

+0

奇妙なキーボードの問題は、focusableintouchmodeのために発生します。これを無効にすると問題が解決します。 –

答えて

0

は、このコードを試してみてください。

public static void setupUI(final View view, final Activity activity) { 

    if (view instanceof ViewGroup) { 
     view.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View view, MotionEvent motionEvent) { 
       Utils.hideSoftKeyboard(activity, view); 
       return false; 
      } 
     }); 
    } 

    if (view instanceof ViewGroup) { 
     for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { 
      View innerView = ((ViewGroup) view).getChildAt(i); 
      setupUI(innerView, activity); 
     } 
    } 
} 

    public static void hideSoftKeyboard(Activity activity, View searchET) { 
    try { 
     InputMethodManager mgr = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
     mgr.hideSoftInputFromWindow(searchET.getWindowToken(), 0); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

はsetupUI関数を呼び出し、自分の活動に親のレイアウトを渡します。 editTextをクリックするたびにキーボードが閉じられることを確認します。

これが役に立ちます。

+0

これは実際に問題の90%を解決しました。しかし、それは最初のクリックの後でしか機能しません。つまり、最初のクリック後に、奇妙な共通のソフトキーボードが表示されます。 –

+0

もう1つ試してみるべきことは、アクティビティの親レイアウトで android:descendantFocusability = "beforeDescendants"とし、次にonCreateでparentLayout.requestFocus()を呼び出します。 –