分享一个可以监听软键盘显示隐藏的布局。

本文介绍了如何在Android应用中解决软键盘遮挡EditText的问题,并通过自定义布局实现软键盘状态的监听。通过在清单文件中加入特定声明,可以避免软键盘弹出时遮挡UI显示。同时,自定义键盘布局类能够监听软键盘的弹出和关闭,从而在输入过程中提供更好的用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作偶然遇到一个问题。就是在scrollview中沉底的位置有一个EditText,这个EditText在获取光标之后,会被软键盘自动覆盖UI显示。
            解决办法:在清单文件中找到该类 加入如下声明:
                android:windowSoftInputMode="adjustPan"
            即可完美解决。

            做类似numpicker的时候会遇到问题,简单来想让中间的EditText实现TextChangeListener就可以完成一个范围段的控制。
            可是实际还是出了很多问题。
            比如一个最尖锐的问题就是假如范围是10-100。这个时候用户想输入40,那么删除了0会立马变成40 同理,多加一位会立马变成100做了这个功能反而成了累赘。所以就得设法监听软键盘的弹出和关闭。

            如下自定义布局作为跟布局:    


package com.minxindai.app.view;

			import android.content.Context;
			import android.util.AttributeSet;
			import android.util.Log;
			import android.widget.RelativeLayout;
			
			public class KeyboardLayout extends RelativeLayout {
			private static final String TAG = KeyboardLayout.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;
			private boolean mHasKeybord;
			private int mHeight;
			private onKybdsChangeListener mListener;
		
			public KeyboardLayout(Context context, AttributeSet attrs, int defStyle) {
				super(context, attrs, defStyle);
			}
		
			public KeyboardLayout(Context context, AttributeSet attrs) {
				super(context, attrs);
			}
		
			public KeyboardLayout(Context context) {
				super(context);
			}
		
			/**
			 * set keyboard state listener
			 */
			public void setOnkbdStateListener(onKybdsChangeListener listener) {
				mListener = listener;
			}
		
			@Override
			protected 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 (mListener != null) {
						mListener.onKeyBoardStateChange(KEYBOARD_STATE_INIT);
					}
				} else {
					mHeight = mHeight < b ? b : mHeight;
				}
				if (mHasInit && mHeight > b) {
					mHasKeybord = true;
					if (mListener != null) {
						mListener.onKeyBoardStateChange(KEYBOARD_STATE_SHOW);
					}
					Log.w(TAG, "show keyboard.......");
				}
				if (mHasInit && mHasKeybord && mHeight == b) {
					mHasKeybord = false;
					if (mListener != null) {
						mListener.onKeyBoardStateChange(KEYBOARD_STATE_HIDE);
					}
					Log.w(TAG, "hide keyboard.......");
				}
			}
		
			public interface onKybdsChangeListener {
				public void onKeyBoardStateChange(int state);
			}
			}

    

这样的话,只需要将其放入所需的页面的布局,然后通过setOnkbdStateListener方法监听软键盘的隐藏和弹出即可,非常的实用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值