2010-12-23 70 views
5

我一直在這一刻撓我的腦袋。在我的一個活動中(並且只有一個),當我調用虛擬鍵盤時,滑動抽屜手柄出現在其上方。我設法通過在我的Manafest.xml文件中的每個活動中放入android:windowSoftInputMode =「adjustPan」來解決我應用中所有其他活動的問題,包括所討論的活動。也就我所能確定的活動中沒有任何對象具有焦點(如果我不知道如何找到它)。我通過使用this.getCurrentFocus()檢查焦點,然後在返回的視圖上執行view.clearFocus()(如果有)。到目前爲止,它還沒有返回一個視圖,據我所知,沒有任何焦點。如何保持滑動抽屜關閉虛擬鍵盤的頂部

有什麼想法?

+1

我遇到同樣的問題,並發現作爲第一個結果你的問題。如果您確實獲得了工作解決方案,請隨時在下面發佈。 – keyboardsurfer 2011-09-16 08:51:58

回答

0

這是我的解決方法..在保存EditText的Activity中,我有一個擴展了EditText的子類。在這個小類中,我重寫了用於檢查鍵盤是否打開的onMeasure()方法。

public static class MyEditText extends EditText { 
      MyActivity context; 

      public void setContext(MyActivity context) { 
       this.context = context; 
      } 

      @Override 
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
       int height = MeasureSpec.getSize(heightMeasureSpec); 
       Activity activity = (Activity)getContext(); 
       Rect rect = new Rect(); 
       activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); 
       int statusBarHeight = rect.top; 
       int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight(); 
       int diff = (screenHeight - statusBarHeight) - height; 
       // assume all soft keyboards are at least 128 pixels high 
       if (diff>128) 
        context.showHandle(false); 
       else 
        context.showHandle(true); 

       super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
      } 
    } 

然後,在活動,如果鍵盤打開抽屜手柄被設置爲1 x 1像素透明圖像,如果鍵盤被隱藏在真實手柄被示出:

private void showHandle(boolean show) { 
    ImageView drawer_handle = (ImageView) findViewById(R.drawable.handle); 
    if (show) 
      drawer_handle.setImageResource(R.drawable.handle); 
    else 
      drawer_handle.setImageResource(R.drawable.handle_blank); 
} 

最後,確保您撥打setContext()onCreate()MyActivity

MyEditText met = (MyEditText) findViewById(R.id.edit_text); 
met.setContext(this);