J'ai un EditText
et un Button
. En cliquant sur le bouton, je veux ouvrir le clavier EditText
tout en demandant de se concentrer sur la EditText
, de sorte que l'utilisateur commence directement à taper le clavier et le texte apparaît dans la EditText
. le bouton ouvre le clavier, mais il ne va pas activer la EditText
, à cause de quel utilisateur doit cliquer à nouveau sur la EditText
pour écrire dessus. Quelle est la solution. Toute aide ou suggestion.
Code sur le clic du bouton
m_SearchEditText.requestFocus();
InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInputFromWindow(m_SearchEditText.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);
assurez-vous que le edittext est activable en mode tactile. Vous pouvez le faire dans les deux sens.
En XML:
Android:focusableInTouchMode="true"
en Java:
view.setFocusableInTouchMode(true);
Personnellement, je ne fais pas confiance à la définition XML de ce paramètre. Je demande toujours le focus par ces deux lignes de code:
view.setFocusableInTouchMode(true);
view.requestFocus();
Le clavier doit apparaître sur lui-même sans qu'il soit nécessaire d'appeler InputMethodManager.
Cela fonctionne dans la plupart des cas. Une fois que cela n’a pas fonctionné pour moi car j’ai perdu la référence à l’objet en raison d’un traitement assez lourd, assurez-vous que ce n’est pas votre problème.
Dans mon cas, cela a fonctionné en ajoutant un gestionnaire après que vous ayez cliqué sur le bouton et que le focus ait été défini dans une autre vue, le focus peut revenir à votre vue souhaitée.
il suffit de mettre ceci dans votre code:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
lastview.getEditText().clearFocus();
m_SearchEditText.requestFocus();
InputMethodManager mgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(mLastNameET, InputMethodManager.SHOW_IMPLICIT);
}
}, 100);
J'espère que c'était utile
Dans votre manifest.xml write:
<activity Android:name=".MainActivity"
Android:label="@string/app_name"
Android:windowSoftInputMode="stateAlwaysVisible" />
Et appelez m_SearchEditText.requestfocus()
dans oncreate()
.
OU,
Essayer:
if(m_SearchEditText.requestFocus()) {
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
Ce qui suit fonctionne pour moi et devrait aider:
EditText yourEditText= (EditText) findViewById(R.id.yourEditText);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);
En tant qu'extension de cette réponse (je ne l'ai pas ajouté en tant que commentaire en raison de sa réputation ...).
Si vous souhaitez réduire le délai à zéro, utilisez handler.post () à la place de . Code complet:
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
lastview.getEditText().clearFocus();
m_SearchEditText.requestFocus();
InputMethodManager mgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(mLastNameET, InputMethodManager.SHOW_IMPLICIT);
}
});
Version de l'extension Kotlin minimaliste parce que nous devrions prétendre que ces sortes d'appels obtus dans les services système ne sont pas nécessaires:
fun EditText.requestKeyboardFocus() {
val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}
Vous avez également besoin de deux attributs XML pour y parvenir:
Android:focusable="true"
Android:focusableInTouchMode="true"
Ajoutez-les à l'EditText ainsi qu'aux dispositions parentales (Toute disposition à l'intérieur de laquelle ces vues sont). Par défaut, elles sont fausses. Par conséquent, la vue demandée n'est pas activée.
Source: https://developer.Android.com/reference/Android/view/View.html#attr_Android:focusable
Après que vous ayez affiché le texte d'édition en fonction de la sélection de case à cocher, ajoutez dynamiquement les points de focus précédents et précédents dans le code.
J'espère que cela t'aides.