Skupiamy się na wybieraniu komponentów interfejsu użytkownika, gdy używasz czegoś innego niż dotyk (np. Pada kierunkowego, klawiatura itp.). Każdy widok może otrzymać fokus, chociaż niektóre nie są domyślnie ustawiane. (Możesz setFocusable(true)ustawić ostrość widoku i wymusić na nim skupienie requestFocus()).
Należy jednak pamiętać, że w trybie dotykowym ostrość jest wyłączona . Jeśli więc używasz palców, programowa zmiana fokusu nic nie robi. Wyjątkiem są widoki, które otrzymują dane wejściowe z edytora danych wejściowych. A EditTextjest takim przykładem. W tej specjalnej sytuacji setFocusableInTouchMode(true)jest używany, aby dać klawiaturze programowej znać, gdzie wysłać dane wejściowe. EditTextMa to ustawienie domyślne. Miękka klawiatura pojawi się automatycznie.
Jeśli nie chcesz, aby klawiatura programowa pojawiała się automatycznie, możesz tymczasowo ją wyłączyć, jak zauważył @abeljus:
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
EditTextJednak po kliknięciu przez użytkownika klawiatura nadal powinna być wyświetlana.
Czytaj dalej: