Android 判断软键盘的状态(显示,隐藏)
16lz
2021-01-23
先上截图,有图有真相:
自定义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 异步加载一张网络图片
- android 获取手机的各种状态
- android 播放视频时切换全屏隐藏状态栏
- android 去除 标题和状态栏
- android 使图片显示 圆角
- android ImageUtils 图片处理工具类