Android(安卓)判断软键盘的状态(显示,隐藏)
16lz
2022-04-22
先上截图,有图有真相:
自定义RelativeLayout
package com.demo.softkeyboard;import android.content.Context;import android.util.AttributeSet;import android.widget.RelativeLayout;public class KeyboardListenRelativeLayout extends RelativeLayout {private static final String TAG = KeyboardListenRelativeLayout.class.getSimpleName();public static final byte KEYBOARD_STATE_SHOW = -3;public static final byte KEYBOARD_STATE_HIDE = -2;public static final byte KEYBOARD_STATE_INIT = -1;private boolean mHasInit = false;private boolean mHasKeyboard = false;private int mHeight;private IOnKeyboardStateChangedListener onKeyboardStateChangedListener;public KeyboardListenRelativeLayout(Context context) {super(context);}public KeyboardListenRelativeLayout(Context context, AttributeSet attrs) {super(context, attrs);}public KeyboardListenRelativeLayout(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}public void setOnKeyboardStateChangedListener(IOnKeyboardStateChangedListener onKeyboardStateChangedListener) {this.onKeyboardStateChangedListener = onKeyboardStateChangedListener;}@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {super.onLayout(changed, l, t, r, b);if(!mHasInit) {mHasInit = true;mHeight = b;if(onKeyboardStateChangedListener != null) {onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_INIT);}} else {mHeight = mHeight < b ? b : mHeight;}if(mHasInit && mHeight > b) {mHasKeyboard = true;if(onKeyboardStateChangedListener != null) {onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_SHOW);}}if(mHasInit && mHasKeyboard && mHeight == b) {mHasKeyboard = false;if(onKeyboardStateChangedListener != null) {onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_HIDE);}}}public interface IOnKeyboardStateChangedListener {public void onKeyboardStateChanged(int state);}}
用法:
package com.demo.softkeyboard;import com.demo.softkeyboard.KeyboardListenRelativeLayout.IOnKeyboardStateChangedListener;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.TextView;/** * 软键盘监听Demo * @author qiaoning * */public class SoftKeyboardListenDemoActivity extends Activity {private EditText editText;KeyboardListenRelativeLayout relativeLayout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); relativeLayout = (KeyboardListenRelativeLayout) findViewById(R.id.keyboardRelativeLayout); editText = (EditText) findViewById(R.id.editText); relativeLayout.setOnKeyboardStateChangedListener(new IOnKeyboardStateChangedListener() {public void onKeyboardStateChanged(int state) {switch (state) {case KeyboardListenRelativeLayout.KEYBOARD_STATE_HIDE://软键盘隐藏editText.setVisibility(View.VISIBLE);break;case KeyboardListenRelativeLayout.KEYBOARD_STATE_SHOW://软键盘显示editText.setVisibility(View.GONE);break;default:break;}}}); }}
使用到的布局文件:
<?xml version="1.0" encoding="utf-8"?><com.demo.softkeyboard.KeyboardListenRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/keyboardRelativeLayout" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:fillViewport="true"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <EditText android:id="@+id/editText" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout> </ScrollView></com.demo.softkeyboard.KeyboardListenRelativeLayout>
更多相关文章
- Android(安卓)内核源代码交叉编译纺
- Android(安卓)fragment中如何对listview添加监听事件
- android 监听方法
- Android(安卓)监听音量加减
- android手势滑动——左右滑动效果实现
- Android(安卓)Socket网络通信
- android中APK开机自动运行
- Android监听屏幕屏幕锁屏与解锁
- Android外接扫码枪监听普通输入事件