实现QQ聊天输入框下的工具栏不被软键盘遮挡

一般情况下,输入法弹起来都在获取焦点的输入框下面,这样的情况就会把输入框下面的内容给遮挡住,但是发现QQ的聊天页面不会,工具栏一样显示在输入框下面。可以下下面图效果

QQ效果.png
一般情况下.png

实现方式应该有很多种的,在这里我实验下自己的想法,就是当软键盘弹起时,会把布局顶上去的,在这里监听软键盘是否弹起,如果弹起,就把布局向上移动一个工具栏的高度就可以显示了。
下面直接撸码,代码毕竟简单,加上快下班了,就不解释了。




    

    

    

    

    

public class MainActivity extends AppCompatActivity {

    EditText mEditText;
    LinearLayout mLinearLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mEditText = findViewById(R.id.edit);
        mLinearLayout = findViewById(R.id.line1);
        init();
    }

    private void init() {
        mEditText.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            //当键盘弹出隐藏的时候会 调用此方法。
            @Override
            public void onGlobalLayout() {
                Rect r = new Rect();
                //获取当前界面可视部分
                MainActivity.this.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
                //获取屏幕的高度
                int screenHeight = MainActivity.this.getWindow().getDecorView().getRootView().getHeight();
                //此处就是用来获取键盘的高度的, 在键盘没有弹出的时候 此高度为0 键盘弹出的时候为一个正数
                int heightDifference = screenHeight - r.bottom;
                Log.e("keb Size", "screenHeight: " + screenHeight);
                Log.e("keb Size", "r.bottom: " + r.bottom);
                Log.e("keb Size", "Size: " + heightDifference);
                pang(heightDifference);
            }

        });
    }
//把工具栏最下面的布局,当软键盘弹窗就显示,收起软键盘就隐藏
    public void pang(int heightDifference) {
        if (heightDifference == 0) {
            mLinearLayout.setVisibility(View.GONE);
        } else {
            mLinearLayout.setVisibility(View.VISIBLE);
        }
        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mLinearLayout.getLayoutParams();
        params.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30, getResources().getDisplayMetrics());
        Log.e("keb Size","mLinearLayout.height = "+mLinearLayout.getLayoutParams().height);
    }
}

最后上效果图,目前只在模拟器试验过,真机还没有试过。如有错误,轻喷


image.png

你可能感兴趣的:(实现QQ聊天输入框下的工具栏不被软键盘遮挡)