先上截图,有图有真相:



自定义RelativeLayout

package com.demo.softkeyboard;import android.content.Context;import android.util.AttributeSet;import android.widget.RelativeLayout;public class KeyboardListenRelativeLayout extends RelativeLayout {private static final String TAG = KeyboardListenRelativeLayout.class.getSimpleName();public static final byte KEYBOARD_STATE_SHOW = -3;public static final byte KEYBOARD_STATE_HIDE = -2;public static final byte KEYBOARD_STATE_INIT = -1;private boolean mHasInit = false;private boolean mHasKeyboard = false;private int mHeight;private IOnKeyboardStateChangedListener onKeyboardStateChangedListener;public KeyboardListenRelativeLayout(Context context) {super(context);}public KeyboardListenRelativeLayout(Context context, AttributeSet attrs) {super(context, attrs);}public KeyboardListenRelativeLayout(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}public void setOnKeyboardStateChangedListener(IOnKeyboardStateChangedListener onKeyboardStateChangedListener) {this.onKeyboardStateChangedListener = onKeyboardStateChangedListener;}@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {super.onLayout(changed, l, t, r, b);if(!mHasInit) {mHasInit = true;mHeight = b;if(onKeyboardStateChangedListener != null) {onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_INIT);}} else {mHeight = mHeight < b ? b : mHeight;}if(mHasInit && mHeight > b) {mHasKeyboard = true;if(onKeyboardStateChangedListener != null) {onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_SHOW);}}if(mHasInit && mHasKeyboard && mHeight == b) {mHasKeyboard = false;if(onKeyboardStateChangedListener != null) {onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_HIDE);}}}public interface IOnKeyboardStateChangedListener {public void onKeyboardStateChanged(int state);}}

用法:

package com.demo.softkeyboard;import com.demo.softkeyboard.KeyboardListenRelativeLayout.IOnKeyboardStateChangedListener;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.TextView;/** * 软键盘监听Demo * @author qiaoning * */public class SoftKeyboardListenDemoActivity extends Activity {private EditText editText;KeyboardListenRelativeLayout relativeLayout;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                relativeLayout = (KeyboardListenRelativeLayout) findViewById(R.id.keyboardRelativeLayout);        editText = (EditText) findViewById(R.id.editText);                relativeLayout.setOnKeyboardStateChangedListener(new IOnKeyboardStateChangedListener() {public void onKeyboardStateChanged(int state) {switch (state) {case KeyboardListenRelativeLayout.KEYBOARD_STATE_HIDE://软键盘隐藏editText.setVisibility(View.VISIBLE);break;case KeyboardListenRelativeLayout.KEYBOARD_STATE_SHOW://软键盘显示editText.setVisibility(View.GONE);break;default:break;}}});    }}

使用到的布局文件:

<?xml version="1.0" encoding="utf-8"?><com.demo.softkeyboard.KeyboardListenRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/keyboardRelativeLayout"    android:layout_width="fill_parent"    android:layout_height="fill_parent">    <ScrollView android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_alignParentLeft="true"        android:layout_alignParentTop="true"        android:fillViewport="true">        <LinearLayout android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:orientation="vertical">            <EditText android:id="@+id/editText"                android:layout_width="fill_parent"                android:layout_height="wrap_content"/>        </LinearLayout>    </ScrollView></com.demo.softkeyboard.KeyboardListenRelativeLayout>


源代码: http://download.csdn.net/detail/qiaoning13256/4401259

更多相关文章

  1. Android(安卓)内核源代码交叉编译纺
  2. Android(安卓)fragment中如何对listview添加监听事件
  3. android 监听方法
  4. Android(安卓)监听音量加减
  5. android手势滑动——左右滑动效果实现
  6. Android(安卓)Socket网络通信
  7. android中APK开机自动运行
  8. Android监听屏幕屏幕锁屏与解锁
  9. Android外接扫码枪监听普通输入事件

随机推荐

  1. Android实现页面悬浮显示
  2. Android(安卓)的res/values/colors自定义
  3. 深入浅出RxJava四-在Android中使用响应式
  4. ArcGIS for Android安装配置详解
  5. Android各种访问权限Permission详解
  6. Android之NDK开发
  7. android完全退出程序
  8. Android之Adapter用法总结
  9. android:giavity和layout_gravity的区别
  10. Android(安卓)APK应用安装原理(1)-解析An