Android软键盘的打开和关闭的监控

2018-01-13 11:05:51来源:网络收集作者:程序诗人人点击

分享

阿里云爆款

最近客户出了一个很变态的需求:当客户在输入框输入内容后,关闭软键盘的时候刷新数据。我去,旁边加个Button按钮就很轻松的问题,搞这么复杂。没思路,找度娘寻思路:
准照度娘的开发经验,搞了一个Demo,可以用了,具体如下:
Demo的xml文件:


<?xml version="1.0" encoding="utf-8"?>
xmlns:Android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
tools:context="com.haoyue.notedemos.input.InputDialogActivity">
android:id="@+id/etListener"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_margin="20dp"
android:background="@drawable/edittext_bc"
android:hint="InputText"
android:textColorHint="#00bb33"
android:paddingLeft="10dp"/>

Activity代码:


public class InputDialogActivity extends BaseActivity {
@BindView(R.id.etListener)
EditText mEtListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_input_dialog);
ButterKnife.bind(this);
setListenerFotEditText(findViewById(R.id.activity_main_layout));
}
private void setListenerFotEditText(View view){
SoftKeyboardStateHelper softKeyboardStateHelper = new SoftKeyboardStateHelper(view);
softKeyboardStateHelper.addSoftKeyboardStateListener(new SoftKeyboardStateHelper.SoftKeyboardStateListener() {
@Override
public void onSoftKeyboardOpened(int keyboardHeightInPx) {
//键盘打开
Toast.makeText(InputDialogActivity.this, mEtListener.getText().toString() + "打开", Toast.LENGTH_SHORT).show();
}
@Override
public void onSoftKeyboardClosed() {
//键盘关闭
Toast.makeText(InputDialogActivity.this, mEtListener.getText().toString() + "关闭", Toast.LENGTH_SHORT).show();
}
});
}
}

SoftKeyboardStateHelper帮助类文件如下:


public class SoftKeyboardStateHelper implements ViewTreeObserver.OnGlobalLayoutListener {
public interface SoftKeyboardStateListener {
void onSoftKeyboardOpened(int keyboardHeightInPx);
void onSoftKeyboardClosed();
}
private final List listeners = new LinkedList();
private final View activityRootView;
private int lastSoftKeyboardHeightInPx;
private boolean isSoftKeyboardOpened;
public SoftKeyboardStateHelper(View activityRootView) {
this(activityRootView, false);
}
public SoftKeyboardStateHelper(View activityRootView, boolean isSoftKeyboardOpened) {
this.activityRootView = activityRootView;
this.isSoftKeyboardOpened = isSoftKeyboardOpened;
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(this);
}
@Override
public void onGlobalLayout() {
final Rect r = new Rect();
//r will be populated with the coordinates of your view that area still visible.
activityRootView.getWindowVisibleDisplayFrame(r);
final int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
if (!isSoftKeyboardOpened && heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
isSoftKeyboardOpened = true;
notifyOnSoftKeyboardOpened(heightDiff);
} else if (isSoftKeyboardOpened && heightDiff < 100) {
isSoftKeyboardOpened = false;
notifyOnSoftKeyboardClosed();
}
}
public void addSoftKeyboardStateListener(SoftKeyboardStateListener listener) {
listeners.add(listener);
}
private void notifyOnSoftKeyboardOpened(int keyboardHeightInPx) {
this.lastSoftKeyboardHeightInPx = keyboardHeightInPx;
for (SoftKeyboardStateListener listener : listeners) {
if (listener != null) {
listener.onSoftKeyboardOpened(keyboardHeightInPx);
}
}
}
private void notifyOnSoftKeyboardClosed() {
for (SoftKeyboardStateListener listener : listeners) {
if (listener != null) {
listener.onSoftKeyboardClosed();
}
}
}
}

经过整合和解耦,使用起来很简单,直接调用一个方法即可,效果如下:
Android软键盘的打开和关闭的监控


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台