J'ai une activité sans widgets enfant et le fichier XML correspondant est,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/myLayout"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:focusable="true"
>
</LinearLayout>
et je veux ouvrir un clavier logiciel par programmation pendant que l'activité commence. Et ce que j'ai déjà essayé, c'est
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (inputMethodManager != null) {
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
Donnez-moi des conseils.
J'ai utilisé les lignes suivantes pour afficher manuellement le clavier virtuel dans l'événement onclick, et le clavier est visible.
InputMethodManager inputMethodManager =
(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInputFromWindow(
linearLayout.getApplicationWindowToken(),
InputMethodManager.SHOW_FORCED, 0);
Mais je ne suis toujours pas en mesure d'ouvrir ceci pendant que l'activité est ouverte, y a-t-il une solution pour cela?
Dans votre fichier manifeste, essayez d’ajouter ce qui suit au <activity>
que vous souhaitez afficher au clavier lorsque l'activité commence:
Android:windowSoftInputMode="stateVisible"
Cela devrait rendre le clavier visible au début de l'activité.
Pour plus d'options, consultez le documentation .
Veuillez suivre le code ci-dessous. Je suis sûr que votre problème sera résolu.
if (imm != null){
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
}
C'est des travaux
<activity
...
Android:windowSoftInputMode="stateVisible" >
</activity>
ou
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
Tout ce dont j'avais besoin était d'exposer le clavier, dans un moment très précis. Cela a fonctionné pour moi! Merci Benites.
private Handler mHandler= new Handler();
Et au moment très précis:
mHandler.post(
new Runnable() {
public void run() {
InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInputFromWindow(yourEditText.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);
yourEditText.requestFocus();
}
});
J'ai utilisé les lignes suivantes pour afficher le clavier virtuel manuellement dans l'événement onclick.
public void showKeyboard(final EmojiconEditText ettext){
ettext.requestFocus();
ettext.postDelayed(new Runnable(){
@Override public void run(){
InputMethodManager keyboard=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.showSoftInput(ettext,0);
}
}
,200);
}
Mettez cela dans la méthode onResume:
findViewById(R.id.root_view_of_your_activity_layout).post(
new Runnable() {
public void run() {
InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInputFromWindow(yourEditText.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);
yourEditText.requestFocus();
}
});
le fichier exécutable est nécessaire car lorsque le système d'exploitation déclenche la méthode onResume, vous ne pouvez pas être sûr que toutes les vues sont dessinées. Par conséquent, la méthode post appelée à partir de votre présentation racine fait patienter jusqu'à ce que chaque vue soit prête.
dans onCreate méthode d'activité ou onActivityCreated d'un fragment
....
view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
view.removeOnPreDrawListener(this);
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
// !Pay attention to return `true`
// Chet Haase told to
return true;
}
});
semble que cela fonctionne
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_patientid);
editText = (EditText)findViewById(R.id.selectPatient);
//editText.requestFocus(); //works without that
}
@Override
protected void onResume() {
findViewById(R.id.selectPatient).postDelayed(
new Runnable() {
public void run() {
editText.requestFocus();
InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(editText,InputMethodManager.SHOW_IMPLICIT);
}
},100);
super.onResume();
}
semble que cela fonctionne mieux: dans manifest:
<application>
<activity
Android:name="com.doodkin.myapp.ReportActivity"
Android:label="@string/title_activity_report"
Android:screenOrientation="sensor"
Android:windowSoftInputMode="stateHidden" > // add this or stateVisible
</activity>
</application>
semble que le manifeste fonctionne dans Android 4.2.2 mais ne fonctionne pas dans Android 4.0.3
J'ai utilisé comme ceci pour montrer le clavier logiciel par programme et cela a fonctionné pour moi pour empêcher le redimensionnement automatique de l'écran lors du lancement du clavier.
Dans manifeste:
<activity Android:name="XXXActivity" Android:windowSoftInputMode="adjustPan">
</activity>
Dans XXXActvity:
EditText et = (EditText))findViewById(R.id.edit_text);
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInputFromWindow(et.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);
}
};
timer.schedule(task, 200);
Je suppose que cela fera gagner du temps aux autres pour rechercher ce problème.
InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
Je l'ai utilisé comme singleton comme:
public static void showSoftKeyboard(final Context context, final EditText editText) {
try {
editText.requestFocus();
editText.postDelayed(
new Runnable() {
@Override
public void run() {
InputMethodManager keyboard = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.showSoftInput(editText, 0);
}
}
, 200);
} catch (NullPointerException npe) {
npe.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
Utilisez-le dans votre activité comme:
showSoftKeyboard(this, yourEditTextToFocus);
fun hideKeyboard(activity: Activity) {
val view = activity.currentFocus
val methodManager = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
assert(view != null)
methodManager.hideSoftInputFromWindow(view!!.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
}
private fun showKeyboard(activity: Activity) {
val view = activity.currentFocus
val methodManager = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
assert(view != null)
methodManager.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
}
public static void hideKeyboard(Activity activity) {
View view = activity.getCurrentFocus();
InputMethodManager methodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
assert methodManager != null && view != null;
methodManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
private static void showKeyboard(Activity activity) {
View view = activity.getCurrentFocus();
InputMethodManager methodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
assert methodManager != null && view != null;
methodManager.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
}
C'est le code source requis:
public static void openKeypad(final Context context, final View v)
{
new Handler().postDelayed(new Runnable()
{
@Override
public void run()
{
InputMethodManager inputManager = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
Log.e("openKeypad", "Inside Handler");
}
},300);}
Pour plus de détails, veuillez suivre ce lien. Cela m'a aidé. https://github.com/Nikhillosalka/Keyboard/blob/master/README.md
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
Utilisez le code ci-dessus dans onResume () pour ouvrir le clavier virtuel
Semblable à la réponse de @ShimonDoodkin c'est ce que j'ai fait dans un fragment.
https://stackoverflow.com/a/29229865/24133
passwordInput.postDelayed(new ShowKeyboard(), 300); //250 sometimes doesn't run if returning from LockScreen
Où ShowKeyboard
est
private class ShowKeyboard implements Runnable {
@Override
public void run() {
passwordInput.setFocusableInTouchMode(true);
passwordInput.requestFocus();
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(passwordInput, 0);
}
}
Après une saisie réussie, je m'assure également de cacher le clavier
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(getView().getWindowToken(), 0);
InputMethodManager.SHOW_FORCED n'est pas un bon choix. Si vous utilisez ce paramètre, vous devez gérer le masquage de l’état du clavier. Ma suggestion est comme ça;
public void showSoftKeyboard(View view) {
InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
view.requestFocus();
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
}
En outre, vous pouvez vous concentrer sur la vue (généralement EditText) en prenant les paramètres. Cela en fait une fonction plus utile
pour plus d'informations sur InputMethodManager.SHOW_IMPLICIT et SHOW_FORCED; InputMethodManager
Cela marche:
private static void showKeyboard(Activity activity) {
View view = activity.getCurrentFocus();
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
Et vous appelez cette méthode comme ceci:
showKeyboard(NameOfActivity.this);
Publiez cette méthode dans votre activité de base et utilisez-la comme un charme
public void openKeyboard() {
InputMethodManager imm =
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
}
public final class AAUtilKeyboard {
public static void openKeyboard(final Activity activity, final EditText editText) {
final InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
}
}
public static void hideKeyboard(final Activity activity) {
final View view = activity.getCurrentFocus();
if (view != null) {
final InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
}
Il y a déjà trop de réponses mais rien ne fonctionnait pour moi en dehors de cela
inputMethodManager.showSoftInput(emailET,InputMethodManager.SHOW_FORCED);
J'ai utilisé showSoftInput
avec SHOW_FORCED
Et mon activité a
Android:windowSoftInputMode="stateVisible|adjustResize"
espérons que cela aide quelqu'un