监听软键盘弹起事件

本文分享了解决登录界面点击EditText触发软键盘弹起后导致布局变形的技术解决方案,通过自定义布局监听软键盘事件并调整布局大小,确保用户体验不受影响。文章还提供了相关代码实现和配置细节,帮助开发者解决类似问题。

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

监听软键盘弹起事件:

项目中遇到登录界面需要点击EditText弹软键盘,但是界面的布局就会发生变形,为了适配,布局需要调整。因此找到网络上这个方法。 和大家分享。

转载:具体地址忘了。以前自己就copy了,但没保存原帖地址,谢谢原作者.

package com.a.b.custom.ResizeLayout xml中不要忘记,是自己定义的。

自定义:此onResize()方法监听布局的变化
package com.a.b.custom;

import android.content.Context;   
import android.util.AttributeSet;
import android.widget.RelativeLayout;
//不调用系统类


public class ResizeLayout extends RelativeLayout {
private OnResizeListener mListener;

public ResizeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}

public interface OnResizeListener {
void OnResize(int w, int h, int oldw, int oldh);
}

public void setOnResizeListener(OnResizeListener l) {
mListener = l;
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);

if (mListener != null) {
mListener.OnResize(w, h, oldw, oldh);
}
}
}


===============================================================

java类:

private static final int BIGGER = 1;

private static final int SMALLER = 2;

@Override//实现接口
public void OnResize(int w, int h, int oldw, int oldh) {
    int change = BIGGER;
    if (h < oldh) {
    change = SMALLER;
}
Message msg = new Message();
msg.what = 0;
msg.arg1 = change;
myHandler.sendMessage(msg);//做你要做的事情
}

======================================================================

需要在清单文件中配置Activity 属性:

  android:windowSoftInputMode="stateAlwaysHidden|adjustResize"

  如果是 android:theme="@android :style/Theme.NoTitleBar.Fullscreen"  也就是全屏,就会失效

 但是 如果想全屏的话 就需要配置成  android:theme="@android :style/Theme.Black.NoTitleBar",并且在setContentView前设置屏幕高宽

// 得到屏幕宽高
int screenWidth = getWindowManager().getDefaultDisplay().getWidth();
int screenHeight = getWindowManager().getDefaultDisplay().getHeight();
// 设置屏幕宽高
getWindow().setLayout(screenWidth, screenHeight);


==============================================================


点击其他地方的软键盘消失的事件:
@Override
public boolean onTouchEvent(MotionEvent event) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (event.getAction() == MotionEvent.ACTION_DOWN && imm.isActive()) {
imm.hideSoftInputFromWindow(Loginpage.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
return super.onTouchEvent(event);
}





转载于:https://my.oschina.net/u/782213/blog/98586

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值