it-swarm.com.de

So zeigen Sie die Soft-Tastatur an, wenn Edittext fokussiert ist

Ich möchte die Soft-Tastatur automatisch anzeigen, wenn eine EditText eingestellt ist (wenn das Gerät keine physische Tastatur hat) und ich zwei Probleme habe:

  1. Wenn meine Activity angezeigt wird, meine EditText fokussiert ist, die Tastatur jedoch nicht angezeigt wird, muss ich erneut darauf klicken, um die Tastatur anzuzeigen (sie sollte angezeigt werden, wenn meine Activity angezeigt wird).

  2. Und wenn ich auf der Tastatur auf "Fertig" geklickt habe, wird die Tastatur verworfen, aber die EditText bleibt fokussiert und möchte nicht (weil meine Bearbeitung abgeschlossen ist).

Um es fortzusetzen, besteht mein Problem darin, etwas ähnlicheres auf dem iPhone zu haben: Dadurch bleibt die Tastatur mit meinem EditText-Status synchronisiert (fokussiert/nicht fokussiert) und natürlich keine Soft-Tastatur, falls eine physische vorhanden ist.

380
Ludovic Landry

Um zu erzwingen, dass die Soft-Tastatur angezeigt wird, können Sie verwenden

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

Und um den Fokus auf EditText zu entfernen, müssen Sie leider einen Dummy View haben, um den Fokus zu erhalten.

Ich hoffe das hilft


Zum Schließen können Sie verwenden

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

Dies funktioniert für die Verwendung in einem Dialog

public void showKeyboard(){
    InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}

public void closeKeyboard(){
    InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
}
518
raukodraug

Ich hatte das gleiche Problem. Unmittelbar nachdem editText VISIBILITY von GONE zu VISIBLE geändert wurde, musste ich den Fokus einstellen und die Soft-Tastatur anzeigen. Ich habe dies mit folgendem Code erreicht:

new Handler().postDelayed(new Runnable() {

    public void run() {
//        ((EditText) findViewById(R.id.et_find)).requestFocus();
//              
        EditText yourEditText= (EditText) findViewById(R.id.et_find);
//        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
//        imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);

        yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
        yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));                           
    }
}, 200);

Es funktioniert für mich mit einer Verzögerung von 100 ms, ist aber ohne Verzögerung oder nur mit einer Verzögerung von 1 ms ausgefallen. 

Der kommentierte Codeteil zeigt einen anderen Ansatz, der nur auf einigen Geräten funktioniert. Ich habe die Betriebssystemversionen 2.2 (Emulator), 2.2.1 (reales Gerät) und 1.6 (Emulator) getestet.

Dieser Ansatz hat mir viel Schmerz erspart.

207
Mike Keskinov

Um die Tastatur anzuzeigen, verwenden Sie

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

Diese Methode ist zuverlässiger als der direkte Aufruf von InputMethodManager.

Zum Schließen verwenden Sie

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
143
David Chandler

Der folgende Code stammt aus dem 4.1-Quellcode von Google für SearchView. Scheint zu funktionieren, gut für kleinere Versionen von Android.

private Runnable mShowImeRunnable = new Runnable() {
    public void run() {
        InputMethodManager imm = (InputMethodManager) getContext()
                .getSystemService(Context.INPUT_METHOD_SERVICE);

        if (imm != null) {
            imm.showSoftInput(editText, 0);
        }
    }
};

private void setImeVisibility(final boolean visible) {
    if (visible) {
        post(mShowImeRunnable);
    } else {
        removeCallbacks(mShowImeRunnable);
        InputMethodManager imm = (InputMethodManager) getContext()
                .getSystemService(Context.INPUT_METHOD_SERVICE);

        if (imm != null) {
            imm.hideSoftInputFromWindow(getWindowToken(), 0);
        }
    }
}

Außerdem muss der folgende Code hinzugefügt werden, wenn der Steuerelement/die Aktivität erstellt wird. (In meinem Fall handelt es sich eher um ein zusammengesetztes Steuerelement als um eine Aktivität).

this.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        setImeVisibility(hasFocus);
    }
});
69
Robin Davies

Wenn nichts anderes funktioniert, erzwinge die Anzeige:

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

Android:windowSoftInputMode="stateAlwaysVisible" -> in der Manifestdatei. 

edittext.requestFocus(); -> im Code.

Dadurch wird die Softtastatur geöffnet, auf der der Bearbeitungstext den Fokus hat, sobald Aktivität angezeigt wird. 

28
gorenikhil33

In letzter Zeit hatte ich in einigen einfachen Fällen etwas Glück mit dem Code Ich habe alle Tests noch nicht beendet, aber ....

EditText input = (EditText) findViewById(R.id.Input);
input.requestFocus();    
input.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
input.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));

Und presto zeigt sich die Tastatur.

26
Dent

Sie können versuchen, die Soft-Tastatur zu erzwingen, sie funktioniert für mich:

...
dialog.show();
input.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
14
Vadim Zin4uk

Um die Tastatur auszublenden, verwenden Sie diese:

getActivity().getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

und Tastatur zeigen:

getActivity().getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
8
Mubashar

Manchmal funktioniert die Antwort von Raukodraug nicht. Ich habe es mit einigen Versuchen und Fehlern so gemacht:

public static void showKeyboard(Activity activity) {
    if (activity != null) {
        activity.getWindow()
                .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    }
}

public static void hideKeyboard(Activity activity) {
    if (activity != null) {
        activity.getWindow()
                .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    }
}

Und der EditText Teil: 

    editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                hideKeyboard(getActivity());
            } else {
                showKeyboard(getActivity());
            }
        }
    });
8
Xieyi

showSoftInput hat bei mir überhaupt nicht funktioniert.

Ich dachte, ich musste den Eingabemodus einstellen: (hier in der Aktivitätskomponente des Manifests)

Android:windowSoftInputMode="stateVisible" 
6
vincebodi

Für Fragment sicher, dass es funktioniert:

 displayName = (EditText) view.findViewById(R.id.displayName);
    InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
6
Arish Khan

Ich habe hier alles kombiniert und für mich funktioniert es:

public static void showKeyboardWithFocus(View v, Activity a) {
    try {
        v.requestFocus();
        InputMethodManager imm = (InputMethodManager) a.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
        a.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
5
lxknvlk

Ich hatte das gleiche Problem in verschiedenen Situationen und die Lösungen, die ich in einigen gefunden habe, arbeiten aber in anderen nicht. Daher ist hier eine kombinierte Lösung, die in den meisten Situationen funktioniert, die ich gefunden habe:

public static void showVirtualKeyboard(Context context, final View view) {
    if (context != null) {
        final InputMethodManager imm =  (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        view.clearFocus();

        if(view.isShown()) {
            imm.showSoftInput(view, 0);
            view.requestFocus();
        } else {
            view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
                @Override
                public void onViewAttachedToWindow(View v) {
                    view.post(new Runnable() {
                        @Override
                        public void run() {
                            view.requestFocus();
                            imm.showSoftInput(view, 0);
                        }
                    });

                    view.removeOnAttachStateChangeListener(this);
                }

                @Override
                public void onViewDetachedFromWindow(View v) {
                    view.removeOnAttachStateChangeListener(this);
                }
            });
        }
    }
}
4
n0sferat0k

Ich glaube oder nicht, dass mein Problem mit der Soft-Tastatur behoben wurde, als ich herausfand, dass die Aktivitäten-Animationen die Soft-Tastatur deaktivieren können. Wenn du die Absicht mit der 

i.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);

und 

overridePendingTransition(0, 0);

Die Soft-Tastatur kann ausgeblendet werden, und es gibt keine Möglichkeit, sie anzuzeigen.

4
sparkbit

Es hat für mich funktioniert. Sie können damit auch versuchen, die Tastatur anzuzeigen:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
4
Tarit Ray

code-Auszug . . .

public void hideKeyboard(Context activityContext){

    InputMethodManager imm = (InputMethodManager)
            activityContext.getSystemService(Context.INPUT_METHOD_SERVICE);

    //Android.R.id.content ( http://stackoverflow.com/a/12887919/2077479 )
    View rootView = ((Activity) activityContext)
            .findViewById(Android.R.id.content).getRootView();

    imm.hideSoftInputFromWindow(rootView.getWindowToken(), 0);
}

public void showKeyboard(Context activityContext, final EditText editText){

    final InputMethodManager imm = (InputMethodManager)
            activityContext.getSystemService(Context.INPUT_METHOD_SERVICE);

    if (!editText.hasFocus()) {
        editText.requestFocus();
    }

    editText.post(new Runnable() {
        @Override
        public void run() {
            imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
        }
    });
}
4
Jongz Puangput
editText.post(new Runnable() {
    @Override
    public void run() {
        InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
    }
});
4
Guest
final InputMethodManager keyboard = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
3
XXX

fügen Sie einfach Android: windowSoftInputMode = "stateHidden" in der Manifestdatei hinzu ...

3
user2202953

Alle oben angegebenen Lösungen ( InputMethodManager Interaktion in OnFocusChangeListener.onFocusChange listener, die an Ihren EditText angehängt sind, funktionieren gut, wenn Sie die Aktivität einzeln bearbeiten.

In meinem Fall habe ich zwei Bearbeitungen.

 private EditText tvX, tvY;
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 tvX.setOnFocusChangeListener(this);
    tvY.setOnFocusChangeListener(this);

@Override
public void onFocusChange(View v, boolean hasFocus) {       
    InputMethodManager imm =  (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if(tvX.hasFocus() || tvY.hasFocus()) {            
        imm.showSoftInput(v, 0);            
    } else {
        imm.hideSoftInputFromWindow(v.getWindowToken(), 0);         
    }       
};

Ich habe beobachtet, dass onFocusChange für tvX mit hasFocus = true (Tastatur angezeigt) ausgelöst wird, dann aber für tvY mit hasFocus = true (Tastatur ausgeblendet). Am Ende war keine Tastatur sichtbar.

Allgemeine Lösung sollte eine korrekte Anweisung enthalten, wenn "Tastatur anzeigen, wenn EditText-Text den Fokus hat"

2
Bartosz Bilicki

In Ihrem onResume () -Abschnitt der Activity können Sie die Methode bringKeyboard () aufrufen.

 onResume() {
     EditText yourEditText= (EditText) findViewById(R.id.yourEditText);
     bringKeyboard(yourEditText);
 }


  protected boolean bringKeyboard(EditText view) {
    if (view == null) {
        return false;
    }
    try {
      // Depending if edittext has some pre-filled values you can decide whether to bring up soft keyboard or not
        String value = view.getText().toString();
        if (value == null) {
            InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
            return true;
        }
    } catch (Exception e) {
        Log.e(TAG, "decideFocus. Exception", e);
    }
    return false;
  }
2
Vikas

In Ihrem Manifest: 

Android:windowSoftInputMode="stateAlwaysVisible" - anfänglich gestartete Tastatur .Android:windowSoftInputMode="stateAlwaysHidden" - anfänglich verborgene Tastatur.

Ich benutze auch gerne "adjustPan", denn wenn die Tastatur startet, passt sich der Bildschirm automatisch an.

 <activity
      Android:name="YourActivity"
      Android:windowSoftInputMode="stateAlwaysHidden|adjustPan"/>
2

Ich hatte ein ähnliches Problem mit Ansichtsanimationen . Also habe ich einen Animations-Listener eingesetzt, um sicherzustellen, dass ich auf das Ende der Animation warten würde , bevor ich versuche, einen Tastaturzugriff auf den angezeigten Edittext anzufordern.

    bottomUp.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            if (textToFocus != null) {
                // Position cursor at the end of the text
                textToFocus.setSelection(textToFocus.getText().length());
                // Show keyboard
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.showSoftInput(textToFocus, InputMethodManager.SHOW_IMPLICIT);
            }
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }
    });
1
Benjamin Piette

Ich bin mit raukodraug einverstanden, dafür muss man in einem swithview den Fokus/Fokus so anfordern: 

    final ViewSwitcher viewSwitcher = (ViewSwitcher) findViewById(R.id.viewSwitcher);
    final View btn = viewSwitcher.findViewById(R.id.address_btn);
    final View title = viewSwitcher.findViewById(R.id.address_value);

    title.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            viewSwitcher.showPrevious();
            btn.requestFocus();
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(btn, InputMethodManager.SHOW_IMPLICIT);
        }
    });

    // EditText affiche le titre evenement click
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            btn.clearFocus();
            viewSwitcher.showNext();
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(btn.getWindowToken(), 0);
            // Enregistre l'adresse.
            addAddress(view);
        }
    });

Grüße.

1
Jean-Luc Barat

Ich entdeckte ein merkwürdiges Verhalten, da in einer meiner Apps beim Eingeben der Aktivität automatisch die Soft-Tastatur angezeigt wurde (in onCreate gibt es einen editText.requestFocus ()).

Beim weiteren Graben entdeckte ich, dass dies daran lag, dass sich um das Layout eine ScrollView befindet. Wenn ich die ScrollView entferne, ist das Verhalten wie in der ursprünglichen Problemanweisung beschrieben: Erst wenn Sie auf den bereits fokussierten editText klicken, wird die Soft-Tastatur angezeigt.

Wenn es für Sie nicht funktioniert, versuchen Sie es mit einem ScrollView - es ist sowieso harmlos.

1
user3392439

Befindet sich EditText im Recycler oder in ListView und/oder haben Sie den Status deaktivieren, verwenden Sie den folgenden Code.

public static void showKeyboardByFocus(final View view)
    {
        view.requestFocus();

        InputMethodManager keyboard = SystemMaster.getInputMethodManager();
        keyboard.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);

        Runnable re = new Runnable()
        {
            @Override
            public void run()
            {
                view.setEnabled(true);
                view.requestFocus();
            }
        };

        Handler h = new Handler(Looper.getMainLooper());
        h.postDelayed(re, 360);
    }
1
Ali Bagheri

Fügen Sie einfach diese Zeile in Ihre EditText-Ansicht ein:

Android:isScrollContainer="true"

und TADA - Tastatur wurde automatisch angezeigt!

Ich hatte ein ähnliches Problem und entdeckte diese einfache und seltsame Lösung.

Wie hier bereits von user3392439 erwähnt, hängt das Aussehen der Tastatur beim Fokussieren irgendwie mit der Präsenz der Scroll-Komponente in der XML-Datei zusammen.

Sogar das Vorhandensein einer anderen EditText-Ansicht, die die oben genannte Zeile in derselben XML-Datei enthält, lässt die Tastatur erscheinen, unabhängig davon, auf welchen EditText sich die aktuelle Einstellung befindet.

Wenn Sie mindestens eine sichtbare Ansicht haben, die eine Bildlaufkomponente in Ihrer XML-Datei enthält, wird die Tastatur automatisch fokussiert.

Wenn kein Bildlauf ausgeführt wird, müssen Sie auf EditText klicken, damit die Tastatur angezeigt wird.

0
Troll Berserker

Mit Xamarin funktioniert das für mich in einem Fragment:

using Android.Views.InputMethods;
using Android.Content;

...

if ( _txtSearch.RequestFocus() ) {
  var inputManager = (InputMethodManager) Activity.GetSystemService( Context.InputMethodService );
  inputManager.ShowSoftInput( _txtSearch, ShowFlags.Implicit );
}
0
sprocket12

rufen Sie die requestFocus () -Methode für editText in der onCrete () -Methode von activity () auf, und rufen Sie die clearFocus () -Methode für denselben editText auf, wenn Sie im Tastaturfeld klicken.

0
Er Prajesh

Das ist wild, funktioniert aber tatsächlich

fun showKeyboard(view: View) {
    try {
        InputMethodManager::class.Java.getMethod(
                "showSoftInputUnchecked",
                Int::class.javaPrimitiveType,
                ResultReceiver::class.Java
        ).apply {
            isAccessible = true
            invoke(view.context.inputMethodManager, 0, null)
        }
    }
    catch (e: Exception) {
       e.printStackTrace()
    }
}
0
egorikem

Sie können auch eine benutzerdefinierte Erweiterung des EditText erstellen, die die Soft-Tastatur beim Öffnen des Fokus öffnet. Das ist es, was ich am Ende getan habe. Folgendes hat für mich funktioniert:

public class WellBehavedEditText extends EditText {
    private InputMethodManager inputMethodManager;
    private boolean showKeyboard = false;

    public WellBehavedEditText(Context context) {
        super(context);
        this.initializeWellBehavedEditText(context);
    }

    public WellBehavedEditText(Context context, AttributeSet attributes) {
        super(context, attributes);
        this.initializeWellBehavedEditText(context);
    }

    public WellBehavedEditText(Context context, AttributeSet attributes, int defStyleAttr) {
        super(context, attributes, defStyleAttr);
        this.initializeWellBehavedEditText(context);
    }

    public WellBehavedEditText(Context context, AttributeSet attributes, int defStyleAttr, int defStyleRes) {
        super(context, attributes, defStyleAttr, defStyleRes);
        this.initializeWellBehavedEditText(context);
    }

    private void initializeWellBehavedEditText(Context context) {
        this.inputMethodManager = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);

        final WellBehavedEditText editText = this;
        this.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                if(showKeyboard) {
                    showKeyboard = !(inputMethodManager.showSoftInput(editText, InputMethodManager.SHOW_FORCED));
                }
            }
        });
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        if(!focused) this.showKeyboard = false;
        super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }

    @Override
    public boolean requestFocus(int direction, Rect previouslyFocusedRect) {
        boolean result = super.requestFocus(direction, previouslyFocusedRect);
        this.showKeyboard = true;
        final WellBehavedEditText self = this;
        this.post(new Runnable() {
            @Override
            public void run() {
                showKeyboard = !(inputMethodManager.showSoftInput(self, InputMethodManager.SHOW_FORCED));
            }
        });
        return result;
    }
}
0
SnoopDougg
 void requestFocus(View editText, Activity activity)
{
    try {
        editText.requestFocus();
        InputMethodManager imm = (InputMethodManager) a.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
        activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
    } catch (Exception e) {
        e.printStackTrace();
    }

}

fügen Sie diese Zeile auch nicht vergessen

activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
0
saigopi

Und für Kotlin verwenden Sie einfach diese Erweiterungen:

fun EditText.showKeyboard() {
    val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}

fun EditText.hideKeyboard() {
    val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(this.windowToken, 0)
}
0
bitvale

Ich benutze Timer. Das Keyboard kann anzeigen, wenn Edittext fokussiert ist.

    edittext = (EditText) findViewById(R.id.edittext );
    edittext.requestFocus();
    edittext.setFocusableInTouchMode(true);
    if (edittext.requestFocus()) {
        final Thread timer = new Thread() {
            public void run() {
                try{
                    sleep(500);
                    InputMethodManager imm =(InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE);
                    imm.showSoftInput(edittext, SHOW_IMPLICIT);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
        timer.start();
0
Cha Mildz

Ich habe diese Hilfe-Klasse erstellt Pass einfach den Kontext und die Ansicht, die Sie fokussieren möchten, zeigen Sie die Tastatur an und verstecken Sie die Tastatur . Ich hoffe es hilft.

public class FocusKeyboardHelper {

private View view;
private Context context;
private InputMethodManager imm;

public FocusKeyboardHelper(Context context, View view){
    this.view = view;
    this.context = context;
    imm = (InputMethodManager) context.getSystemService(context.INPUT_METHOD_SERVICE);
}

public void focusAndShowKeyboard(){

    view.requestFocus();
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

}

public void hideKeyBoard(){
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

}

0
Vinicius Morais