监听软键盘弹起事件

监听软键盘弹起事件:

项目中遇到登录界面需要点击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);
}





你可能感兴趣的:(监听软键盘弹起事件)