Android 軟鍵盤的顯示和隱藏
阿新 • • 發佈:2019-02-19
前不久一個朋友問了一個簡單的問題,就是需要根據軟鍵盤的顯示與否控制一些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。