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();
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 ()
utilisation:
editText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
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);
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!
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);
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()
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);
}
}
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();
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)