Android监听软键盘的弹起和隐藏

时间:2022-08-23 23:40:22

         做安卓键盘功能的时候,要是需求不单单是输入文字,比如要输入表情,图片等的时候,就需要监听键盘的弹起和隐藏。在实际的项目中也遇到了这样的需求。接下来就写个博客,记录一些方法。

实现原理就是监听自定义控件的高度变换得键盘的弹起和隐藏状态。


都是程序员都心急。直接上代码:


MainActivity:

package com.example.testsoftinput;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

import com.example.testsoftinput.ListenerInputView.OnKeyBoardStateChangeListener;

public class MainActivity extends Activity {

private ListenerInputView mListenerInputView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mListenerInputView=(ListenerInputView) findViewById(R.id.mListenerInputView);

mListenerInputView.setOnKeyBoardStateChangeListener(new OnKeyBoardStateChangeListener() {

@Override
public void OnKeyBoardState(int state) {
// TODO Auto-generated method stub
switch (state) {
//开启
case 1:
Toast.makeText(getApplicationContext(), "输入法显示了.", 1).show();
break;
//关闭
case 0:
Toast.makeText(getApplicationContext(), "变化为正常状态(输入法关闭).", 1).show();
break;

default:
break;
}

}
});
}
}


activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${packageName}.${activityClass}" >

<com.example.testsoftinput.ListenerInputView
android:id="@+id/mListenerInputView"
android:layout_width="2dip"
android:layout_height="match_parent" >
</com.example.testsoftinput.ListenerInputView>

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#22ff0000"
android:gravity="center"
android:text="Android技术交流群 :110520459" />

<EditText
android:layout_width="match_parent"
android:layout_height="50dip"
android:hint="监听软键盘的弹起和隐藏" />

</RelativeLayout>


ListenerInputView:

package com.example.testsoftinput;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

public class ListenerInputView extends View {
private static final boolean DEBUG = true;
private static final String TAG = "softinput";
private Context mContext;
private int softKeyboardHeight = 0;
public ListenerInputView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
init(context);
}

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

public ListenerInputView(Context context) {

super(context);
init(context);

}

private void init(Context context) {
this.mContext = context;
}

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

super.onSizeChanged(w, h, oldw, oldh);

if (DEBUG) {

Log.i(TAG, "screenHeight=" + 0 + ";w=" + w + ";h=" + h + ";oldw="
+ oldw + ";oldh=" + oldh);

}

if (Math.abs(h - oldh) > softKeyboardHeight) {

if (h >= oldh) {

if (DEBUG) {

if (listener != null) {
listener.OnKeyBoardState(0);
}
Log.i(TAG, "变化为正常状态(输入法关闭).");

}

} else {

if (DEBUG) {
if (listener != null) {
listener.OnKeyBoardState(1);
}
Log.i(TAG, "输入法显示了.");
}

}

} else {

if (oldh != 0) {

if (DEBUG) {
Log.i(TAG, "变化为正常状态.(全屏关闭)");
if (listener != null) {
listener.OnKeyBoardState(0);
}
}

} else {

if (DEBUG) {
Log.i(TAG, "初始化,当前为正常状态.");

}

}

}

}

/**
* 监听键盘变化 state 1 开启软键盘 0关闭软键盘
*
* @author haoweilai
*
*/
public interface OnKeyBoardStateChangeListener {

void OnKeyBoardState(int state);
}

private OnKeyBoardStateChangeListener listener;

public void setOnKeyBoardStateChangeListener(
OnKeyBoardStateChangeListener listener) {
this.listener = listener;
}
}


看到这里的朋友明白了,其实很简单。战友们我们一起加油!

原创链接:http://blog.csdn.net/u010052279/article/details/50151177


最后附上demo下载地址:http://download.csdn.net/detail/u010052279/9320537