1. 程式人生 > >Android 軟鍵盤的顯示和隱藏

Android 軟鍵盤的顯示和隱藏

前不久一個朋友問了一個簡單的問題,就是需要根據軟鍵盤的顯示與否控制一些view的顯示。所以寫了一個小demo,試了一下,效果還ok。現在貼出來,作個記錄。
思想是重寫RelativeLayout,根據其中onSizeChanged方法來進行判斷軟鍵盤是否顯示。
下面是重寫的relativeLayout內容:

public class SoftKeybroadRelativeLayout extends RelativeLayout {
    private InputWindowListener listener;
    public SoftKeybroadRelativeLayout
(Context context, InputWindowListener listener) { super(context); this.listener = listener; } public SoftKeybroadRelativeLayout(Context context) { super(context); } public SoftKeybroadRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); } public
SoftKeybroadRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); if (oldh > h) { if
(listener != null) listener.show(); } else { if (listener != null) listener.hidden(); } } public void setListener(InputWindowListener listener) { this.listener = listener; } }

主要的處理邏輯是在onSizeChanged方法裡面。
* @param w Current width of this view.
* @param h Current height of this view.
* @param oldw Old width of this view.
* @param oldh Old height of this view.
所以進行比較高度就可以了。

下面是其中InputWindowListener

public interface  InputWindowListener {
    void show();
    void hidden();
}

然後在需要處理的時候利用該SoftKeybroadRelativeLayout 代替RelativeLayout,設定Listener,在需要處理的Activity的清單配置檔案中設定屬性為:
android:windowSoftInputMode=”adjustResize”

tip:

android:windowSoftInputMode=”adjustResize” 該屬性如果在全屏模式下會失效,導致軟鍵盤的顯示和隱藏也有問題。

這是一種簡單的實現方式,因為他要做的activity並不是全屏,所以這裡先TODO一下該問題,以後有機會再處理下 n(≧▽≦)n。