hoe het toetsenbord te verbergen na het typen in EditText in Android?

Ik heb een EditTexten een knop uitgelijnd met de onderkant van de ouder.

Als ik er tekst in invoer en op de knop druk om gegevens op te slaan, verdwijnt het virtuele toetsenbord niet.

Kan iemand me helpen hoe ik het toetsenbord kan verbergen?


Antwoord 1, autoriteit 100%

Misschien wilt u ook de imeOptions definiëren in de EditText. Op deze manier verdwijnt het toetsenbord zodra u op Gereed drukt:

<EditText
    android:id="@+id/editText1"
    android:inputType="text"
    android:imeOptions="actionDone"/>

Antwoord 2, autoriteit 92%

Dit zou moeten werken.

InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); 

Zorg er wel voor dat this.getCurrentFocus() geen null retourneert, wat het geval zou zijn als niets focus heeft.


Antwoord 3, autoriteit 18%

  mEtNumber.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_DONE) {
                    // do something, e.g. set your TextView here via .setText()
                    InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                    return true;
                }
                return false;
            }
        });

en in xml

 android:imeOptions="actionDone"

Antwoord 4, autoriteit 8%

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

Antwoord 5, autoriteit 6%

Ik heb niemand deze methode zien gebruiken:

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean focused) {
        InputMethodManager keyboard = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (focused)
            keyboard.showSoftInput(editText, 0);
        else
            keyboard.hideSoftInputFromWindow(editText.getWindowToken(), 0);
    }
});

En vraag dan gewoon de focus op de editText:

editText.requestFocus();

Antwoord 6, autoriteit 3%

Oplossing opgenomen in de EditText-actielistener:

public void onCreate(Bundle savedInstanceState) {
    ...
    ...
    edittext = (EditText) findViewById(R.id.EditText01);
    edittext.setOnEditorActionListener(new OnEditorActionListener() {
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
                InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                in.hideSoftInputFromWindow(edittext.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
            }
            return false;
        }
    });
    ...
    ...
}

Antwoord 7, autoriteit 2%

Ik heb dit gevonden omdat mijn EditText niet automatisch werd verwijderd bij enter.

Dit was mijn originele code.

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if ( (actionId == EditorInfo.IME_ACTION_DONE) || ((event.getKeyCode() == KeyEvent.KEYCODE_ENTER) && (event.getAction() == KeyEvent.ACTION_DOWN ))) {
            // Do stuff when user presses enter
            return true;
        }
        return false;
    }
});

Ik heb het opgelost door de regel te verwijderen

return true;

na het doen van dingen wanneer de gebruiker op enter drukt.

Ik hoop dat dit iemand helpt.


Antwoord 8, autoriteit 2%

Schrijf gewoon deze twee regels code op waar de enter-optie zal werken.

InputMethodManager inputManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);

Antwoord 9

Ik heb hier de afgelopen dagen mee geworsteld en een oplossing gevonden die heel goed werkt. Het zachte toetsenbord wordt verborgen wanneer een aanraking ergens buiten de EditText wordt gedaan.

Code hier gepost: verberg standaard toetsenbord bij klikken in Android


Antwoord 10

u kunt op deze manier eenvoudig een singleton-klasse voor bellen maken:

public class KeyboardUtils {
    private static KeyboardUtils instance;
    private InputMethodManager inputMethodManager;
    private KeyboardUtils() {
    }
    public static KeyboardUtils getInstance() {
        if (instance == null)
            instance = new KeyboardUtils();
        return instance;
    }
    private InputMethodManager getInputMethodManager() {
        if (inputMethodManager == null)
            inputMethodManager = (InputMethodManager) Application.getInstance().getSystemService(Activity.INPUT_METHOD_SERVICE);
        return inputMethodManager;
    }
    @SuppressWarnings("ConstantConditions")
    public void hide(final Activity activity) {
        new Handler().post(new Runnable() {
            @Override
            public void run() {
                try {
                    getInputMethodManager().hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
                } catch (NullPointerException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

dus, na kan de activiteit worden opgeroepen hoe het volgende formulier:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);
        KeyboardUtils.getInstance().hide(this);
    }
}

Antwoord 11

Je kunt het gemarkeerde antwoord bovenaan zien. Maar ik gebruikte getDialog().getCurrentFocus()en werkte goed. Ik post dit antwoord omdat ik "this"niet kan typen in mijn oncreatedialog.

Dus dit is mijn antwoord. Als je het gemarkeerde antwoord hebt geprobeerd en niet werkt, kun je dit eenvoudig proberen:

InputMethodManager inputManager = (InputMethodManager) getActivity().getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getDialog().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

Antwoord 12

Ik gebruik deze methode om het toetsenbord te verwijderen uit het bewerken van tekst:

public static void hideKeyboard(Activity activity, IBinder binder) {
    if (activity != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (binder != null && inputManager != null) {
            inputManager.hideSoftInputFromWindow(binder, 0);//HIDE_NOT_ALWAYS
            inputManager.showSoftInputFromInputMethod(binder, 0);
        }
    }
}

En deze methode om het toetsenbord uit activiteit te verwijderen (werkt in sommige gevallen niet – bijvoorbeeld bij het bewerken van tekst, waaraan het toetsenbord is gebonden, de focus verliest, werkt het niet. Maar voor andere situaties werkt het geweldig, en jij hoef je geen zorgen te maken over het element dat het toetsenbord vasthoudt).

public static void hideKeyboard(Activity activity) {
    if (activity != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (activity.getCurrentFocus() != null && inputManager != null) {
            inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
            inputManager.showSoftInputFromInputMethod(activity.getCurrentFocus().getWindowToken(), 0);
        }
    }
}

Antwoord 13

int klavStat = 1; // for keyboard soft/hide button
int inType;  // to remeber your default keybort Type

editor – is EditText-veld

/// metod for onclick button ///
public void keyboard(View view) {
    if (klavStat == 1) {
        klavStat = 0;
        inType = editor.getInputType();
        InputMethodManager imm = (InputMethodManager)
                getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
        editor.setInputType(InputType.TYPE_NULL);
        editor.setTextIsSelectable(true);
    } else {
        klavStat = 1;
        InputMethodManager imm = (InputMethodManager)
                getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
        editor.setInputType(inType);
    }
}

Als je een ander EditText-veld hebt, moet je letten op verandering van focus.


Antwoord 14

In mijn geval, om het toetsenbord te verbergen wanneer ik op de “verzendknop” drukte, heb ik het geaccepteerde antwoord gebruikt, maar de context gewijzigd in getApplication en getWindow() toegevoegd.

InputMethodManager inputManager = (InputMethodManager) getApplication().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

Antwoord 15

editText.setInputType(InputType.TYPE_NULL);

Other episodes