先上截圖,有圖有真相:
自定義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;
- }
-
- @Override
- protected 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://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2012年資料/6月/30日/Android 判斷軟鍵盤的狀態(顯示,隱藏)