Androidソフトキーボード処理

2297 ワード

弾いた時
  • の最初のパラメータViewは、EditTextまたはそのサブクラスが望ましい.
  • レイアウトは、ロードが完了する必要があります.(遅延ロードによる解決、View.postDelayed()はソリューション)
  • 隠した時
  • は、1つのview
  • に依存する必要がある.
  • はやはり遅延処理によって完成する、効果がある
  • である.
    まだ効果がないなら、300 msのように時間を大きくします.
    ソフトキーボード非表示部分コンポーネントの処理TODO
    https://www.jianshu.com/p/89eec61fa699
    /**
         *      
         *
         * @param view
         */
        @RequiresApi(api = Build.VERSION_CODES.CUPCAKE)
        public static void showSoftKeyboard(final View view) {
            if (view == null) {
                return;
            }
            view.setFocusable(true);
            view.setFocusableInTouchMode(true);
            if (!view.isFocused()) {
                view.requestFocus();
            }
    
            view.postDelayed(new Runnable() {
                @Override
                public void run() {
                    InputMethodManager inputMethodManager = (InputMethodManager) view.getContext()
                            .getSystemService(Context.INPUT_METHOD_SERVICE);
                    inputMethodManager.showSoftInput(view, 0);
                }
            }, 100);
        }
    
    /**
         *      
         *
         * @param view
         */
    
       public static void hideSoftKeyboard(final View view) {
            if (view == null) {
                return;
            }
    
            view.postDelayed(new Runnable() {
                @Override
                public void run() {
                    InputMethodManager manager = (InputMethodManager) view.getContext()
                            .getSystemService(Context.INPUT_METHOD_SERVICE);
                    manager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                }
            }, 100);
        }
    
    /**
     *        2/3           
     * @param context
     * @return
     */
    public static boolean isSoftShowing(Context context) {
        //            
        int screenHeight = ((Activity)context).getWindow().getDecorView().getHeight();
        //   View     bottom
        Rect rect = new Rect();
        // DecorView  activity   view
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
            ((Activity)context).getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
        }
        //            (        :screenHeight = rect.bottom +        )
        //   screenHeight*2/3    
        return screenHeight*2/3 > rect.bottom;
    }