監聽軟鍵盤彈起事件: java
項目中遇到登陸界面須要點擊EditText彈軟鍵盤,可是界面的佈局就會發生變形,爲了適配,佈局須要調整。所以找到網絡上這個方法。 和你們分享。 android
轉載:具體地址忘了。之前本身就copy了,但沒保存原帖地址,謝謝原做者. 網絡
package com.a.b.custom.ResizeLayout xml中不要忘記,是本身定義的。 ide
自定義:此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類: this
private static final int BIGGER = 1; spa
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 屬性: .net
android:windowSoftInputMode="stateAlwaysHidden|adjustResize" xml
若是是 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);
}