2013-12-23 126 views
1

我在Android應用程序編碼中遇到了一個非常簡單的問題。我有一個EditText對象列表,每行一個。Android:在edittext中顯示鍵盤

當用戶長按EditText時,我需要顯示鍵盤。當用戶執行長按,然後我把這個方法:

private void setNameAsEditable (View rowView, boolean setToEditable) { 

    EditText textView = (EditText) rowView 
      .findViewById(R.id.edittext_name); 
    textView.setFocusableInTouchMode(setToEditable); 
    textView.setFocusable(setToEditable); 
      InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.showSoftInput(textView, InputMethodManager.SHOW_IMPLICIT); 
    } 

的EditText上變成可編輯的(下劃線,並出現光標,你可以看到如下圖)

enter image description here

但鍵盤沒有出現。

我嘗試了各種解決方案從stackoverflow(像這個EditText is not showing virtual keyboard),但徒勞無功。

我甚至嘗試

this.getWindow().setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 

我想軟鍵盤只要用戶長按下的EditText上來。有人可以幫忙嗎?

+0

在那個鏈接中,他在不同的avd上試過他的代碼,它的工作原理。你試過了嗎? –

+1

也嘗試在'InputMethodManager'上方給''textView.requestFocus();''。 Bcs,除了你的代碼,我只有這一行,它似乎工作正常 – Hariharan

+0

非常感謝@Tamilan!你的答案與艾米特一起幫助! – user2903200

回答

3

試試吧,對我來說它工作正常。

et =(EditText) findViewById(R.id.edittext_name); 
     imm = (InputMethodManager)this.getSystemService(Service.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(et.getWindowToken(), 0); 
     et.setText("hide key board"); 
     et.setFocusable(false); 
    et.setOnLongClickListener(new OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 
      // TODO Auto-generated method stub 
      et.setFocusableInTouchMode(true); 
      imm.showSoftInput(et, 0); 
      et.setText("show key board long pressed"); 
      return false; 
     } 
    }); 
+0

非常感謝@Amit!它與Tamilan的答案一起幫助 – user2903200

3

這是最後的工作(阿米特的答案+泰米蘭的答案)非常感謝!

private void setNameAsEditable (View rowView, boolean setToEditable) { 

    EditText textView = (EditText) rowView 
      .findViewById(R.id.edittext_name); 
    textView.setFocusableInTouchMode(setToEditable); 
    textView.setFocusable(setToEditable); 

    InputMethodManager imm = (InputMethodManager) getContext().getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(textView.getWindowToken(), 0); 

    if (setToEditable) { 
     textView.requestFocus(); 
     imm.showSoftInput(textView, 0); 
    } 
} 
0

檢查,如果你有機器人:可聚焦= 「假」 或Android:focusableInTouchMode =在XML佈局 「假」。

1
EditText yourEditText= (EditText) findViewById(R.id.yourEditText); 
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);