歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android Dialog 隱藏鍵盤問題

場景:自定義了一個Dialog,Dialog裡面包含EditText,當輸入時手機鍵盤會彈出,但是點擊空白區域Dialog關閉時鍵盤不會自動隱藏。

之前也自定義過一個Dialog,裡面也是包含EditText,不過因為這個Dialog占地方比較大,當彈出鍵盤時已經沒有空白區域可以點擊,所以在Dialog上添加了一個關閉按鈕,然後調用下面方法:

public static void hideSoftKeyboard(Activity context, View view) {
        InputMethodManager imm = (InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }

這樣Dialog關閉後鍵盤都可以自動收起,但是最近做的一個Dialog,當彈出鍵盤後點擊空白區域Dialog關閉了但是鍵盤還是沒有收起!!! 通過不斷的嘗試發現了另外一個方法:

首先我們監聽Dialog的關閉方法,然後調用收起鍵盤的方法。

this.setOnDismissListener(new OnDismissListener() {

            @Override
            public void onDismiss(DialogInterface dialog) {
                // TODO Auto-generated method stub
                InputMethodManager inputMgr = (InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
                inputMgr.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS, 0);
            }
        });

這樣當點擊空白區域關閉Dialog的時候,鍵盤也可以收起了。不過這個方法有個弊端就是如果鍵盤沒有彈出的話就會彈出鍵盤。。。(好坑), 而且判斷鍵盤是否彈出的方法inputMgr.isActive()會一直返回true。。最後沒辦法只能通過重寫父布局,這我是重寫的RelativeLayout,通過onSizeChanged(int w, int h, int oldw, int oldh)和onLayout(boolean changed, int l, int t, int r, int b)方法來判斷鍵盤是否彈出,最後調用上面的方法解決。

這裡再提個自定義Dialog需要注意的問題:當我們給Dialog自定義布局的時候會發現即使我們沒有設置背景,會發現Dialog的背景為白色,一般我們需要的是透明。這裡在自定義的時候需要在代碼裡加入:

 
        Window dialogWindow = getWindow();
        WindowManager.LayoutParams lp = dialogWindow.getAttributes();
        dialogWindow.setBackgroundDrawableResource(Android.R.color.transparent);
        DisplayMetrics d = context.getResources().getDisplayMetrics();
        lp.width = (int) (d.widthPixels * 0.6);
        dialogWindow.setAttributes(lp);

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved