天天看点

Android 软键盘弹起隐藏的监听

Android软键盘是没有直接的监听事件的,网上说通过该SDK源码,重新编译可以实现直接的监听,但总感觉复杂,只是没办法中的办法。还有一种是通过监听onLayout函数来实现,但这个有局限性,只针对压缩布局,就是软键盘弹起后,屏幕布局上下压缩的形式,不过相对简单,特定情况下用着也很方便,所以上网搜了下,记下来。

总共两步: 一 复写布局    

                   二 实现监听

一:复写布局,以LinearLayout为例。

package com.yy.my.utils;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.LinearLayout;


/**
 * 重写布局,实现压缩模式下软键盘弹出隐藏的监听
 * 
 * @author Administrator
 *
 * 2015.1.24
 */

public class ResizeLayout extends LinearLayout{
	
	private OnResizeListener mListener;
	
	public interface OnResizeListener{
		void OnResize(int w, int h, int oldw, int oldh);
	}
	
	public void setOnResizeListener(OnResizeListener l){
		mListener = l;
	}
	
	public ResizeLayout(Context context) {
		super(context);
	}

	public ResizeLayout(Context context, AttributeSet attrs){
		super(context, attrs);
	}
	
	@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);
		}
		
	}
	
	
}
           

二:activity里面实现监听。

//重写的LinearLayout布局
ResizeLayout mLayout = (ResizeLayout) findViewById(R.id.main_root_layout_id);
mLayout.setOnResizeListener(new OnResizeListener() {   //对布局进行监听
	@Override
	public void OnResize(int w, int h, int oldw, int oldh) {
		if (h < oldh){	
			//现在的高度小于原有高度,说明软键盘弹起,压缩了布局
		}
				
		if (h > oldh){
			//现在的高度大于原有高度,说明软键盘隐藏了
		}
	}
});