2012-12-02 108 views
0

我使用下面的代碼隱藏鍵盤點擊一個按鈕時:隱藏鍵盤問題

private OnClickListener saveButtonListener = new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     final View activityRootView = findViewById(R.id.myProfileDetails); 
     activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight(); 
       if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard... 
        imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); 
       } 
      } 
     }); 
     //other code that does something 

    } 

} 

也做一些其他的事情,但它都沒有涉及到鍵盤上按下按鈕,按鈕,活動不會改變。

我的活動中還有兩個EditText字段。當我使用應用程序時,我點擊任何一個領域,他們獲得焦點和鍵盤出現。當我按下按鈕時,鍵盤會消失,而其他代碼則完全按照它應該執行的方式執行。在這種情況下,一切都是完美的。

第二次點擊EditText字段時會出現問題。現在,EditText獲得了重點,但鍵盤出現和消失幾乎立即沒有我做任何事情。我猜我的代碼會讓鍵盤在第一次點擊按鈕後永久消失。爲什麼會發生這種情況,我該如何解決這個問題?

回答

0

您正在初始化您的OnClick中的ClickListener。這將盡快隱藏鍵盤heightDiff>100。不要這樣做。

做這樣

private OnClickListener saveButtonListener = new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
        imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.hideSoftInputFromWindow(
           editText.getWindowToken(), 0); 

     //other code that does something 

    } 

} 
+0

這樣做解決了一個問題,但創建另一個!它解決了我上面提到的問題。但是,即使不關注我的「EditText」,我按下按鈕,彈出鍵盤。當我再次按下按鈕時,鍵盤被隱藏起來。這一直在發生。我猜這是因爲去切換功能。任何想法如何糾正? – Ankush

+0

哦,是的!你只想隱藏鍵盤?然後嘗試我的編輯! –

+1

它的工作原理。謝謝 – Ankush