Androidのソフトキーボードの概要

Androidのソフトキーボードのプロパティ

ソフトキーボードのプロパティは通常と呼ばれるノード属性でのAndroidManifest.xmlのアクティビティで定義されたアンドロイド:windowSoftInputMode  このプロパティは、2つのオプションのコンポーネントがあり、隠されたソフトウェア指定されたディスクを表示するには、「状態」の先頭にある、「あります「調整モード、便利な表示ソフトキーボードを指定するために使用されるActivity]ウィンドウの始まりを調整します。あなたは1、2を指定するか、または使用しての値を指定することができます|  分離すること。

windowSoftInputMode値、次のように:

冒頭の状態:

  • stateVisible:状態は常に活動のポップアップ表示を入力するソフトキーボードであるときことを示しています。
  • stateAlwaysVisible:ソフトキーボードインターフェイスが非表示の状態であっても別の画面にジャンプし、状態は常に活動のポップアップ表示を入力するソフトキーボードであるときことを示し、その後、まだポップアップで表示されますバックソフトキーボードへジャンプします。
  • stateHidden:それは活動ソフトキーボードを入力するとき、常に状態を隠されていることを意味します。
  • stateAlways 隠し活動ソフトキーボードを入力するときは常に隠された状態であることを意味し、でも、別の画面にジャンプし、ソフトキーボードインタフェースのステータスが表示され、その後、ソフトキーボードに戻ってジャンプすることは隠されたまま。
  • stateUnchanged:それは隠されている隠されている場合は、ソフトキーボードインターフェイスのステータスが表示され、ジャンプするとき、他のインターフェイスのステータスが表示されている場合は、同じソフトキーボード、ソフトキーボードの現在の状態を示します。
  • stateUnspecified:指定されていない状態を示し、システムの状態は、適切なインタフェースに応じて定義されます。

先頭を調整します。

  • adjustPanは:現在は、ソフトキーボードフォーカスをブロックされないようにレイアウトをインタフェースするこの属性は、上方向にシフトしますが、入力ボックスでそこにブロックされる以下の場合、ユーザーは離れ下記入れて、再びソフトキーボードの入力ボックスをクリックする必要があります。
  • adjustResize:このプロパティは、常に自身が活動を調整することができる必要があるコンテンツを表示することができ、ソフトキーボード、部屋は、それが動作しないようにするメインウィンドウのサイズを変更する活動です。

ソフトキーボードの閉塞

  • 方法a:windowSoftInputMode設定
    1. 設定adjustPan:レイアウトは、入力ボックスの下にある場合には、上に行くだろうが、まだユーザーエクスペリエンスが良くない、ブロックされます。
    2. + AdjustResize ScrollView:ScrollViewレイアウトに加えてadjustResize必要なレイアウトの高さは、変えることができます。

              しかし、ときに設定フルスクリーンやステータスバーが失敗します浸します。

              フルスクリーンの設定

              設定  は、GetWindowを()でsetFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN、 WindowManager.LayoutParams.FLAG_FULLSCREEN) 、スクリーンとき複数の入力ボックス、現在のフレームの入力以下の入力ボックスと場合と同様に入力を、下にスライドすることができないadjustPan、唯一あなたは部分をスライドさせることができ、およびインターフェースの高さを調整しません。

               没入ステータスバーを設定します。

               次のスタイルで追加されました  。<項目名=「アンドロイドwindowTranslucentStatus: 」>真</ item>は、ルートレイアウト設定することにより、シャッター入力ボックスのポップアップソフトウェア、とき入力ボックスをクリックした後fitsSystemWindows = 『true』を:アンドロイドは、  障害を解決します。

  • 方法2:ソフトキーボードがポップアップ表示するかどうかを判断するために活動ビューの上部に耳を傾け、その後、再描画されたインターフェースにより、

    public class SoftHideKeyBoardUtil {
        public static void assistActivity(Activity activity) {
            new SoftHideKeyBoardUtil(activity);
        }
    
        private View mChildOfContent;
        private int usableHeightPrevious;
        private FrameLayout.LayoutParams frameLayoutParams;
    
        private SoftHideKeyBoardUtil(Activity activity) {
            //1、找到Activity的最外层布局控件,它其实是一个DecorView,它所用的控件就是FrameLayout
            FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);
            //2、获取到setContentView放进去的View
            mChildOfContent = content.getChildAt(0);
            //3、给Activity的xml布局设置View树监听,当布局有变化,如键盘弹出或收起时,都会回调此监听
            mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
                //4、当前布局发生变化时,对Activity的xml布局进行重绘
                possiblyResizeChildOfContent();
            });
            //5、获取到Activity的xml布局的放置参数
            frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();
        }
    
        // 获取界面可用高度,如果软键盘弹起后,Activity的xml布局可用高度需要减去键盘高度
        private void possiblyResizeChildOfContent() {
            //1、获取当前界面可用高度,键盘弹起后,当前界面可用布局会减少键盘的高度
            int usableHeightNow = computeUsableHeight();
            //2、如果当前可用高度和原始值不一样
            if (usableHeightNow != usableHeightPrevious) {
                //3、获取Activity中xml中布局在当前界面显示的高度
                int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();
                //4、Activity中xml布局的高度-当前可用高度
                int heightDifference = usableHeightSansKeyboard - usableHeightNow;
                //5、高度差大于屏幕1/4时,说明键盘弹出
                if (heightDifference > (usableHeightSansKeyboard / 4)) {
                    // 6、键盘弹出了,Activity的xml布局高度应当减去键盘高度
                    frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;
                } else {
                    frameLayoutParams.height = usableHeightSansKeyboard;
                }
                //7、 重绘Activity的xml布局
                mChildOfContent.requestLayout();
                usableHeightPrevious = usableHeightNow;
            }
        }
    
        private int computeUsableHeight() {
            Rect r = new Rect();
            mChildOfContent.getWindowVisibleDisplayFrame(r);
            // 全屏模式下:直接返回r.bottom,r.top其实是状态栏的高度
            return r.bottom;
        }
    }复制代码


ます。https://juejin.im/post/5cf4c55b6fb9a07f0a2dca68で再現

おすすめ

転載: blog.csdn.net/weixin_34261739/article/details/91430542