2012-01-24 8 views
106

Mam układ, który zawiera pewne poglądy tak:Jak ustawić ostrość (i wyświetlić klawiaturę) na moim EditText programowo

<LinearLayout> 
<TextView...> 
<TextView...> 
<ImageView ...> 
<EditText...> 
<Button...> 
</linearLayout> 

Jak ustawić ostrość (wyświetlanie klawiatury) na mój EditText programowo?

Próbowałem tego i działa tylko wtedy, gdy normalnie uruchamiam mój Activity, ale kiedy uruchamiam go w TabHost, to nie działa.

txtSearch.setFocusableInTouchMode(true); 
txtSearch.setFocusable(true); 
txtSearch.requestFocus(); 
+0

ht tp: //www.android-ios-tutorials.com/93/android-show-hide-soft-keyboard-programmatically/ – Houcine

+0

Możliwy duplikat [Jak pokazać soft-klawiaturę, gdy editekst jest skoncentrowany] (http: // stackoverflow .com/questions/5105354/how-to-show-soft-keyboard-when-edittext-is-focused) – raukodraug

Odpowiedz

224

Spróbuj tego:

EditText editText = (EditText) findViewById(R.id.myTextViewId); 
editText.requestFocus(); 
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 

http://developer.android.com/reference/android/view/View.html#requestFocus()

+56

to nie działa brat, – Houcine

+0

Zaktualizowany kodem, aby zmusić klawiaturę do wyświetlenia z tej odpowiedzi: http://przepełnienie stosu.com/questions/5105354/how-to-show-soft-keyboard-when-edittext-is-focused –

+5

działa tylko wtedy, gdy uruchamiam moją aktywność normalnie, ale kiedy uruchamiam moją aktywność na TabHost, to nie działa, – Houcine

30

showSoftInput nie działa dla mnie w ogóle.

Pomyślałem, że muszę ustawić tryb wejściowy: android:windowSoftInputMode="stateVisible" (tutaj w składniku aktywność w manifeście)

nadzieję, że to pomaga!

+4

To pokazało klawiaturę po rozpoczęciu działania. – William

+0

Awesome :) Wypróbowałem kilka odpowiedzi, ale tylko dzięki temu mogłem sprawić, żeby to działało :) Dziękuję bardzo. – Srikanth

+0

Pracowałem także dla mnie, dzięki! –

114

użytku:

editText.requestFocus(); 
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 
+18

Po wypróbowaniu więcej niż 5 innych podejść, to było jedyne, które zadziałało dla mnie (z podklasy 'View'). – William

+9

Ta sugestia prowadzi do poprawienia klawiatury, nawet gdy pole traci ostrość. – untill

+2

tak, działa również dla mnie, a 'imm.showSoftInput()' nie działa. –

26

ten pracował dla mnie, Dzięki ungalcrys

Pokaż klawiaturę:

editText = (EditText)findViewById(R.id.myTextViewId); 
editText.requestFocus(); 
InputMethodManager imm = (InputMethodManager)getSystemService(this.INPUT_METHOD_SERVICE); 
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY); 

Ukryj klawiszowe:

InputMethodManager imm = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); 
+2

Jedyne pełne rozwiązanie. Dzięki. – korro

0

I c żadna z tych odpowiedzi nie mogłaby działać samodzielnie. Rozwiązanie dla mnie było je łączyć:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 
editText.requestFocus(); 
imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); 

Nie jestem pewien, dlaczego, co było wymagane dla mnie - według docs wydaje się, że zarówno metoda powinna pracował na własną rękę.

14
final EditText tb = new EditText(this); 
tb.requestFocus(); 
tb.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
     inputMethodManager.showSoftInput(tb, InputMethodManager.SHOW_IMPLICIT); 
    } 
}, 1000); 
+1

Musiałem to zrobić, aby wyświetlić go w onResume(). Bez opóźnień nic nie zdarzyłoby się przy użyciu każdego rozwiązania opisanego w tym wątku. – Alex

+1

To jest. To była odpowiedź, której szukałem. Chociaż nie trzeba koniecznie całego drugiego opóźnienia. Wypróbowałem zaledwie 150 milisów, co też zadziałało dobrze. – Rubberduck

2

Oto jak rozszerzenie Kotlin na pokazywanie i ukrywanie klawiatury ekranowej może być wykonane:

fun View.showKeyboard() { 
    this.requestFocus() 
    val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 
    inputMethodManager.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT) 
} 

fun View.hideKeyboard() { 
    val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0) 
} 

Następnie można po prostu to zrobić:

editText.showKeyboard() 
// OR 
editText.hideKeyboard() 
1

Oto KeyboardHelper klasy dla ukrywanie i pokazywanie klawiatury

import android.content.Context; 
import android.view.View; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.EditText; 

/** 
* Created by khanhamza on 06-Mar-17. 
*/ 

public class KeyboardHelper { 

    public static void hideSoftKeyboard(Context context, View view) { 
     if (context == null) { 
      return; 
     } 

     InputMethodManager imm = (InputMethodManager) context 
       .getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 

    } 

    public static void hideSoftKeyboard(Context context, EditText editText) { 

     InputMethodManager imm = (InputMethodManager) context 
       .getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); 
    } 


    public static void openSoftKeyboard(Context context, EditText editText) { 
     InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 
    } 

}