2012-05-09 10 views
39

Kiedy zaczyna się mój fragment, chcę, aby mój edittext był ostry/niech użytkownik zacznie go pisać. Jestem w stanie skupić się na funkcji requestFocus(), ale nie mogę uruchomić klawiatury.Pokaż klawiaturę dla edittext, gdy fragment zaczyna się

Próbowałem zarówno to:

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

i

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

Jak mogę dostać klawiaturę, aby pokazać się na EditText?

+0

To co pracował dla mnie - [http://stackoverflow.com/questions/14759253/show-keyboard-automatically/39658629#39658629](http://stackoverflow.com/questions/14759253/show-keyboard-automatically/39658629#39658629) – v01d

+0

Moja reputacja to zbyt niska, aby skomentować th e pytanie. Odpowiedziałem [tutaj] (http://stackoverflow.com/a/43807917/5390932) za pomocą metody kontrolowania, kiedy pokazać lub ukryć klawiaturę – Catapimba

Odpowiedz

77

Czy to działa?

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

Jeśli masz problemy z zamknięciem, użyj jeszcze jednej [tych metod] (http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html#hideSoftInputFromInputMethod%28android.os.IBinder,%20int%29) – Sam

+2

To rozwiązanie przypomina obejście tego problemu. Prawidłowa procedura powinna być albo zalecana przez OP, albo wywoływać 'imgr.showSoftInput (getView(), InputMethodManager.SHOW_IMPLICIT)'. Toggle faktycznie * zamknie * klawiaturę, jeśli już się otworzy. Opisane rozwiązanie jest jedynym, nad którym pracowałem, więc czy jest to błąd w strukturze? Lepsze rozwiązanie lub wyjaśnienie byłoby docenione. – Nilzor

+0

@Nilzor Wiem, że Twój komentarz jest nieco stary, ale ostatnio miał ten sam problem i znalazł ten raport o błędzie https://code.google.com/p/android/issues/detail?id=25812. Mogą być spokrewnione, ale nie widziałem ich zbyt wiele od zespołu Androida, więc nie jestem pewien, czy ma priorytet. – MikeIsrael

0

Jak Nilzor powiedział to działa

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

i zgadzam się, że jest to najlepsze rozwiązanie niż toogleSoftInput

+1

Nie działa we wszystkich przypadkach. – cesards

6

Można spróbować tego

@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

To rozwiązanie działało ze mną, chociaż nie musiałem robić rzeczy edit.post, dodałem tylko 3 linie wewnątrz twojego run() do metody wznowienia bezpośrednio. –

+1

Nie działa we wszystkich przypadkach. – cesards

0

Innym sposobem na klawiaturę Otwórz, gdy zaczyna się Twój fragment, to zadzwoń pod numer requestFocus() w onCreateView i zareaguj zgodnie wystarczy otworzyć klawiaturę i tylko wtedy, gdy można ustawić ostrość na EditText.

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

Nie działa we wszystkich przypadkach. – 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

ten artykuł pomógł mi

@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

Ponieważ korzystanie showSoftInput nie działa we wszystkich przypadkach i po wypróbowaniu niektóre z wymienionych tutaj rozwiązań, takich jak:

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

I wreszcie stało się pracować używając:

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

od:

binding.account.requestFocus() 

żądać tylko ostrość na EditText (nie otworzyć klawiaturę)

i

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

to jedyny rozwiązanie, które wydaje się działać prawidłowo, aby pokazać klawiaturę (i najczęściej wybieraną)

Powodzenia!:-)

0

Wystarczy za pomocą dodawania 2 linie będą działać jak czar:

Jeśli za pomocą XML

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

Else w Java:

view.setFocusableInTouchMode(true); 
view.requestFocus(); 
Powiązane problemy