2011-01-05 120 views
0

好吧,另一個奇怪的問題。我有活動Main.java和DialogLikeActivity.java。打開/關閉軟鍵盤(Galaxy S)

主要

EditText (articleNumber) - phone input type (in .XML) 
Button (articleOK) 
list (list) 

DialogLikeActivity(活動,但有對話的主題風格和機器人:windowSoftInputMode = 「stateAlwaysVisible」在清單標籤)我有

EditText (articlePackaging) - phone input type (in .XML) 
Button (finish) 

我想要什麼?當我輸入主要活動鍵盤與電話輸入類型打開,這很好。當我點擊EditText字段時,填寫一些內容並點擊OK靜態變量將變爲狀態1(總是顯示鍵盤) - 它只是主活動中的靜態變量。

public static int keyboardMode = 1; 

點擊OK打開鍵盤打開(電話輸入類型)的DialogLikeActivity。當我點擊確定主恢復簡歷

@Override 
public void onResume() { 
    super.onResume(); 

    if (keyboardMode == 1) { 
     showKeyboard(articleNumber); 
    } else { 
     hideKeyboard(articleNumber); 
    } 
} 

public static void showKeyboard(View view) { 
    InputMethodManager mgr = (InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE); 
    mgr.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT); 

    ((InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(view, 0); 

    articleNumber.setInputType(InputType.TYPE_CLASS_PHONE); 
} 

public static void hideKeyboard(View view) { 
    InputMethodManager mgr = (InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE); 
    mgr.hideSoftInputFromWindow(view.getWindowToken(), 0); 

    articleNumber.setInputType(0); 
} 

// Listener to showKeyboard if user clicks on EditText field and set InputType to PHONE, insted it would remain (0) 

    articleNumber.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      showKeyboard(articleNumber); 
     } 
    }); 

// Listener so when user touches the list - it hides the keyboard and sets variable on 2 so keyboard is always HIDDEN 

    list.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 

      hideKeyboard(articleNumber); 
      keyboardMode = 2; 

      return false; 
     } 
    }); 

// Listener so when user clicks on ArticleOK - keyboard is always OPEN 

articleOk.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) {    
       keyboardMode = 1; 

        Intent i = new Intent(NewOrderArticles.this, NewQuantityDialog.class); 
        i.putExtra("articleid", articleId); 
        startActivity(i); 
      } 
     } 
    }); 

並確保鍵盤與電話輸入類型打開。如果我點擊/滾動瀏覽Main keyboardMode變量的列表變成2(總是隱藏) - 所以鍵盤隱藏(使用名爲list.onTouch監聽器的hideKeyboard方法)。如果我點擊列表中的某個項目,它會再次打開DialogLikeActivity,並打開鍵盤和手機輸入類型。如果我點擊確定onResume主鍵入並隱藏鍵盤(請參閱代碼)。

那看起來好像請看視頻(視頻中的確定按鈕是文章按鈕) - Video (3,24 MB)

因此,實際上 - 如果我點擊OK(articleOK)按鈕 - 鍵盤總是必須證明,如果是我,不過開始滾動thorugh列表或單擊列表中的一些項目 - 鍵盤必須只有在DialogLikeActivity所示活動,否則在主要它必須保持隱藏(當然,如果我點擊頂部的EditText字段,它會再次打開)。

在視頻中可以看到HTC Desire的一切工作只是我想要的方式,而是 - 上的Galaxy S的始終顯示部分工作,但如果我點擊/滾動列表,打開它的了鍵盤與字母鍵入(!)而不是隱藏它。問題在哪裏?

所以確定按鈕 - 始終顯示鍵盤(在Main和DialogLikeActivity中)。如果只在DialogLikeActivity中點擊/滾動列表顯示鍵盤。

+0

你在說什麼?你有什麼問題? – Falmarri 2011-01-05 18:12:57

+0

爲什麼它在我的HTC Desire上工作,但不在Galaxy S上(它顯示鍵盤佈局中的鍵盤佈局被隱藏起來只是隱藏它)? – svenkapudija 2011-01-05 18:24:02

回答

2

我與用數字彈出鍵盤的EditText有同樣的問題。點擊確定或取消後,虛擬鍵盤不會隱藏,並在三星Galaxy S設備上顯示帶有字母類型的鍵盤。 它在Emulator 2.1或2.2和我的HTC Hero上運行良好,但在2.2版的Samsung Galaxy S設備上運行得不錯。我也試過: mgr.toggleSoftInput(InputMethodManager。HIDE_IMPLICIT_ONLY,0); 但還是沒有機會

編輯:確定,只有這一行解決的問題:

mgr.toggleSoftInput(0, 0); 

,沒有這兩條線:

mgr.hideSoftInputFromWindow(view.getWindowToken(), 0); 
articleNumber.setInputType(0);