2012-05-09 7 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

Моя репутация слишком низко, чтобы комментировать e вопрос. Я ответил [здесь] (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)'. Toggle фактически * закрывает * клавиатуру, если она уже будет открыта. Описанное решение - единственное, что я получил, чтобы работать, так ли это ошибка в рамках? Будет оценено лучшее решение или объяснение. – 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, я только добавил три строки внутри вашего запуска() к методу возобновления напрямую. –

+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" 

Else в Java:

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