一般情况下,输入法弹起来都在获取焦点的输入框下面,这样的情况就会把输入框下面的内容给遮挡住,但是发现QQ的聊天页面不会,工具栏一样显示在输入框下面。可以下下面图效果
实现方式应该有很多种的,在这里我实验下自己的想法,就是当软键盘弹起时,会把布局顶上去的,在这里监听软键盘是否弹起,如果弹起,就把布局向上移动一个工具栏的高度就可以显示了。
下面直接撸码,代码毕竟简单,加上快下班了,就不解释了。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#27b1fc">
</LinearLayout>
<EditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="我是输入框"/>
<TextView
android:layout_width="match_parent"
android:layout_height="30dp"
android:background="#ff0"
android:gravity="center"
android:text="我是工具栏"/>
<LinearLayout
android:id="@+id/line1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"/>
</LinearLayout>
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);
}
}
最后上效果图,目前只在模拟器试验过,真机还没有试过。如有错误,轻喷