100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android软键盘的打开和关闭的监控

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

时间:2024-01-12 22:20:09

相关推荐

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

最近客户出了一个很变态的需求:当客户在输入框输入内容后,关闭软键盘的时候刷新数据。我去,旁边加个Button按钮就很轻松的问题,搞这么复杂。没思路,找度娘寻思路:

准照度娘的开发经验,搞了一个Demo,可以用了,具体如下:

Demo的xml文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/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"><EditTextandroid: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"/></LinearLayout>

Activity代码:

public class InputDialogActivity extends BaseActivity {@BindView(R.id.etListener)EditText mEtListener;@Overrideprotected 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() {@Overridepublic void onSoftKeyboardOpened(int keyboardHeightInPx) {//键盘打开Toast.makeText(InputDialogActivity.this, mEtListener.getText().toString() + "打开", Toast.LENGTH_SHORT).show();}@Overridepublic 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<SoftKeyboardStateListener> listeners = new LinkedList<SoftKeyboardStateListener>();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);}@Overridepublic 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();}}}}

经过整合和解耦,使用起来很简单,直接调用一个方法即可,效果如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。