聊天界面在点击输入框时,软键盘弹出时对话列表要滑动到底部,所以需要监听键盘弹出的状态。
因为Android本身并没有给出相应的监听方法,所以主要采用的方式还是监听整体视图或布局的高度变化来达到监听键盘弹出的目的。
在manifest文件中设置当前Activity的android:windowSoftInputMode属性如下:
android:windowSoftInputMode="stateAlwaysHidden| adjustResize"
stateAlwaysHidden:用户选择activity时,软键盘总是显示的状态
adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间。(这样在键盘弹出时activity会调整布局的大小)
采用的方式是:给activity最外层的布局添加View. OnLayoutChangeListener
public class MainActivity extends Activity implements OnLayoutChangeListener{
//最外层的Layout视图
private RelativeLayout rlRootLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rlRootLayout = findViewById(R.id.rl_root_layout);
}
@Override
protected void onResume() {
super.onResume();
//添加layout大小发生改变监听器
rlRootLayout(this);
}
@Override
public void onLayoutChange(View v, int left, int top, int right,
int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
//现在认为只要控件将Activity向上推的高度超过了150屏幕高,就认为软键盘弹起,
//高度自己确定,也可以设定为屏幕高度的1/3或1/4等
if(oldBottom != 0 && bottom != 0 &&(oldBottom - bottom > 150)){
Toast.makeText(this, "键盘弹起...", Toast.LENGTH_SHORT).show();
}else if(oldBottom != 0 && bottom != 0 &&(bottom - oldBottom > 150)){
Toast.makeText(this, "键盘关闭...", Toast.LENGTH_SHORT).show();
}
}
}