web-dev-qa-db-fra.com

Comment définir le focus (et afficher le clavier) sur mon EditText par programme

J'ai une mise en page qui contient des vues comme celle-ci:

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

Comment définir le focus (afficher le clavier) sur mon EditText par programme?

J'ai essayé cela et cela ne fonctionne que lorsque je lance ma Activity normalement, mais lorsque je la lance dans un TabHost, cela ne fonctionne pas.

txtSearch.setFocusableInTouchMode(true);
txtSearch.setFocusable(true);
txtSearch.requestFocus();
152
Houcine

Essaye ça:

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 ()

308
David Merriman

utilisation:

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

Cela a fonctionné pour moi, grâce à ngalcrys

Afficher le clavier:

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);

Masquer le clavier:

InputMethodManager imm = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
43
Danilo Raspa

showSoftInput ne fonctionnait pas du tout pour moi.

J'ai pensé que je devais définir le mode d'entrée: Android:windowSoftInputMode="stateVisible" (ici dans le composant Activity du manifeste)

J'espère que cette aide!

38
vincebodi
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);
31
Kunal Bhatia

Voici comment créer une extension kotlin pour afficher et masquer le clavier logiciel:

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)
}

Ensuite, vous pouvez simplement faire ceci:

editText.showKeyboard()
// OR
editText.hideKeyboard()
10
alvarlagerlof

Voici KeyboardHelper Class pour cacher et afficher le clavier

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);
    }

}
1
Hamza Khan

première manière:

    etPassword.post(() -> {
        etPassword.requestFocus();
        InputMethodManager manager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        manager.showSoftInput(etPassword, InputMethodManager.SHOW_IMPLICIT);
    });

Deuxième manière:

En manifeste:

    <activity
        Android:name=".activities.LoginActivity"
        Android:screenOrientation="portrait"
        Android:windowSoftInputMode="stateVisible"/>

Dans du code:

etPassword.requestFocus();
0
Hadi Note

J'ai essayé pas mal de façons et cela ne fonctionne pas, je ne suis pas sûr que ce soit parce que j'utilise une transition partagée d'un fragment à une activité contenant le texte de montage.

Btw my edittext est également encapsulé dans LinearLayout.

J'ai ajouté un léger retard pour demander le focus et le code ci-dessous a fonctionné pour moi: (Kotlin)

 et_search.postDelayed({
     editText.requestFocus()

     showKeyboard()
 },400) //only 400 is working fine, even 300 / 350, the cursor is not showing

showKeyboard ()

 val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
 imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)
0
veeyikpong