2012-05-09 53 views
39

當我的片段開始時,我想讓我的edittext處於焦點/讓用戶開始鍵入它。我可以通過requestFocus()獲得焦點,但我無法讓鍵盤顯示出來。當片段開始時顯示edittext的鍵盤

我曾經嘗試都這樣:

edit = (EditText) view.findViewById(R.id.search); 
edit.requestFocus(); 
InputMethodManager imgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
imgr.showSoftInput(edit, 0); 

edit = (EditText) view.findViewById(R.id.search); 
InputMethodManager imgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
imgr.showSoftInput(edit, 0); 
edit.requestFocus(); 

我怎樣才能獲取鍵盤露面的EditText?

+0

這是對我工作 - [http://stackoverflow.com/questions/14759253/show-keyboard-automatically/39658629#39658629](http://stackoverflow.com/questions/14759253/show-keyboard-automatically/39658629#39658629) – v01d

+0

我的聲望是太低評論問題。我通過控制何時顯示或隱藏鍵盤的方法回答了[here](http://stackoverflow.com/a/43807917/5390932) – Catapimba

回答

77

這是行不通的?

imgr.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 
+0

如果您在關閉它時遇到困難,請使用另一個[這些方法](http:///developer.android.com/reference/android/view/inputmethod/InputMethodManager.html#hideSoftInputFromInputMethod%28android.os.IBinder,%20int%29) – Sam

+2

這感覺就像一個解決方法。正確的過程應該是OP建議的或調用'imgr.showSoftInput(getView(),InputMethodManager.SHOW_IMPLICIT)'。如果碰巧已經打開,切換將實際上*關閉*鍵盤。所描述的解決方案是我已經開始工作的唯一一個,所以這是一個框架中的錯誤?更好的解決方案或解釋將不勝感激。 – Nilzor

+0

@Nilzor我知道你的評論有點舊,但最近有同樣的問題,並發現這個錯誤報告https://code.google.com/p/android/issues/detail?id=25812。雖然可能是相關的,但從Android團隊上看不到太多,所以不確定它有優先級。 – MikeIsrael

0

由於Nilzor說,這個工程

imgr.showSoftInput(getView(), InputMethodManager.SHOW_IMPLICIT) 

,我同意它比toogleSoftInput

一個最好的解決方案
+1

不適用於所有情況。 – cesards

6

你可以試試這個

@Override 
public void onResume() { 
    super.onResume(); 
    edit.post(new Runnable() { 
     @Override 
     public void run() { 
      edit.requestFocus(); 
      InputMethodManager imgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imgr.showSoftInput(edit, InputMethodManager.SHOW_IMPLICIT); 
     } 
    }); 
} 
+0

這個解決方案與我一起工作,雖然我不需要做edit.post的事情,我只是將你的run()中的3行直接添加到resume方法中。 –

+1

不適用於所有情況。 – cesards

0

另一種方法來使鍵盤當你的片段開始時打開是撥打requestFocus()onCreateView並反應accor只有當EditText是可調焦的時候纔打開鍵盤。

if(this.editText.requestFocus()) 
{ 
    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
} 
+1

不適用於所有情況。 – cesards

0
@Override 
public void onHiddenChanged (boolean hidden) 
{ 
    super.onHiddenChanged(hidden); 

    if(hidden) 
    { 
     hideKeyboard(yourView); 
    } 
    else 
    { 
     toggleKeyboard(yourView); 
    } 
} 

    public static void toggleKeyboard(View v) 
{ 
    InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
    v.requestFocus(); 

    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_NOT_ALWAYS); 
} 

public static void hideKeyboard(View v) 
{ 
    InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 

    imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 
} 
-1

這篇文章幫助我

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) 
{ 
    View view = inflater.inflate(R.layout.fragment_edit_name, container); 
    editText = (EditText) view.findViewById(R.id.txt_yourName); 
    editText.requestFocus(); 
    getDialog().getWindow().setSoftInputMode(
         LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
    return view; 
} 

https://turbomanage.wordpress.com/2012/05/02/show-soft-keyboard-automatically-when-edittext-receives-focus/

2

由於使用showSoftInput的所有情況不工作,並試圖這裏提到的一些,像解決方案後:

if (binding.account.requestFocus()) { 
    getActivity().getWindow() 
     .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
} 

我終於做到了工作中使用

if (binding.account.requestFocus()) { 
    ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(
     InputMethodManager.SHOW_FORCED, 
     InputMethodManager.HIDE_IMPLICIT_ONLY 
); 
} 

由於:

binding.account.requestFocus() 

只要求重點用於EditText(不打開鍵盤)

((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(
     InputMethodManager.SHOW_FORCED, 
     InputMethodManager.HIDE_IMPLICIT_ONLY 
); 

是唯一的解決方案似乎正在正常工作以顯示鍵盤(並且投票數最多)

祝你好運!:-)

0

簡單地說,使用添加2號線將工作就像一個魅力:

如果使用XML

android:focusable="true" 
android:focusableInTouchMode="true" 

否則在Java中:

view.setFocusableInTouchMode(true); 
view.requestFocus();