Як показувати софт-клавіатуру, коли фокус редагується


461

Я хочу автоматично показувати програмну клавіатуру, коли EditTextфокусується (якщо у пристрою немає фізичної клавіатури) і у мене є дві проблеми:

  1. Коли Activityвідображається мій, мій EditTextфокусується, але клавіатура не відображається, мені потрібно ще раз натиснути на нього, щоб показати клавіатуру (вона повинна відображатися, коли відображається моя Activity).

  2. І коли я натискаю кнопку "Готово" на клавіатурі, клавіатура відхиляється, але EditTextзалишається зосередженою, а я не хочу (бо моя редагування виконується).

Якщо відновитись, моя проблема полягає в тому, щоб мати щось подібне на iPhone: яке підтримує синхронізацію клавіатури з моїм EditTextстаном (зосереджена / не сфокусована), і, звичайно, не існує програмної клавіатури, якщо є фізична.


У мене просто є базовий EditText на кшталт: <EditText android: id = "@ + id / myEditText" android: layout_width = "fill_parent" android: layout_height = "wrap_content" android: imeOptions = "actionDone" /> І про свою діяльність я маю це: EditText editTxt = (EditText) findViewById (R.id.myEditText); editTxt.requestFocus ();
Людовик Ландрі

2
Це допомогло мені краще, ніж будь-яка відповідь у цій публікації: stackoverflow.com/a/2418314/1491212
Армель Ларсьє

Відповіді:


628

Щоб примусити появу м'якої клавіатури ви можете використовувати

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

А щоб зняти фокус, на EditTextжаль, вам потрібно мати пустушку, Viewщоб захопити фокус.

Я сподіваюся, що це допомагає


Щоб закрити його, ви можете скористатися

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

Це працює для його використання в діалоговому вікні

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);
}

2
Якщо я це роблю, програмна клавіатура відображається, коли з’являється активність (це добре), але коли фокус залишає EditText і, наприклад, переходить до кнопки, клавіатура залишається (це погано).
Людовик Ландрі

157
Не працює для мене з EditText у діалоговому вікні, яке вже має фокус. Не знаю чому.
Маттіас

10
@AbdellahBenhammou, можливо, зробивши запитЗверніть увагу на ваш текст редагування, перш ніж показати м'який ввід, може вирішити вашу проблему. Це зробило для мене.
r1k0

18
@AbdellahBenhammou, зробіть це в onCreate (): getDialog (). GetWindow (). SetSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
Філіпп

22
Працював лише в поєднанні з yourEditText.requestFocus()описаним тут: stackoverflow.com/questions/8991522/…
Vivek Pandey

231

У мене була така ж проблема. Відразу після редагування текстової зміни БІЗОБІЛЬНОСТІ з GONE на VISIBLE мені довелося встановити фокус і відобразити м'яку клавіатуру. Я досяг цього, використовуючи наступний код:

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);

Він працює для мене із затримкою 100 мс, але вийшов з ладу без затримки або лише із затримкою 1мс.

Коментована частина коду показує інший підхід, який працює лише на деяких пристроях. Я тестував версії ОС 2.2 (емулятор), 2.2.1 (реальний пристрій) та 1.6 (емулятор).

Такий підхід врятував мені багато болю.


48
Я не знав, що щось може бути таким потворним і таким прекрасним одночасно. Дуже дякую!
mkerley

15
@jellyfish це імітує натискання на EditText. Для інших, хто читає це, замість того, щоб створювати новий, Handlerви також можете використовувати View.postDelayed()метод у самому yourEditTextвіджеті.
Тоні Чан

5
Це злом - набагато краще рішення Девіда Чандлера.
Бен Бедерсон

4
Якщо рішення Девіда Чандлера працює у всіх версіях / пристроях Android та у випадку, коли VISIBILITY просто змінили з GONE на VISIBLE, ТАК ТАК - вам слід скористатися його рішенням.
Майк Кескінов

3
Домовились. Чи знаєте ви краще рішення, яке працює у всіх Android ароматах?
Майк Кескінов

162

Щоб відобразити клавіатуру, використовуйте

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

Цей метод є більш надійним, ніж виклик InputMethodManager безпосередньо.

Щоб закрити його, використовуйте

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

12
Може хтось, будь ласка, пояснить, чому це надійніше, ніж безпосередньо звертатись InputMethodManager? (Для одного це не працює, на відміну від рішення Раукодрауга.)
Метью Кірос

5
Не працює і для мене. Робота в Android 2.3.5. Рішення raukodraug для мене працює. Шукали залежність версії, але не змогли її знайти.
Гюго Логманс

2
Це працювало для мене в Android 4.4.2. Метод InputMethodManager, обраний як рішення для цієї посади, для мене не працював.
Філ

після використання методу у відповіді я додав це, і він спрацював, але без нього він не працював. thanx
Manny265

2
Не працював для мене в Android 4.4.2. Він показує клавіатуру, але не приховував її.
Джон Дж. Сміт

87

Коли нічого іншого не працює, примушуйте його показувати :

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

А потім пізніше, якщо ви хочете його закрити, наприклад, у OnPause () ви можете зателефонувати:

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

4
Ви мали рацію, @Bolling! Коли нічого іншого не працювало, ваш код врятував мене. Дякую!
Вілліан Пайшао

3
Ваш код був єдиним, хто працював на мене, і я намагався будь-яке рішення на цій сторінці! Дуже дякую!
Маттіа Руджієро

4
не змушуй це. у деяких випадках, коли ви переходите від переднього плану до фону, клавіатура залишатиметься там, тому що ви примусили її. це питання фрагментації, але я бачив це на дуетах Samsung.
j2emanue

У мене завжди є код, щоб закрити клавіатуру onPause (), оскільки я бачив, як вона застрягла, навіть якщо ви її не змушували.
Боллінг

Це спрацювало, але при переході на інші екрани воно все ще залишається відкритим
Сіту

75

У вихідному коді Google для SearchView розміщено наступний код. Здається, добре працює і на менших версіях 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);
        }
    }
}

Потім, крім того, слід створити такий код, коли створюється Control / Activity. (У моєму випадку це складений контроль, а не діяльність).

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

Дякую! Це працює надзвичайно добре. І це рішення, яке мені більше подобається, з усіх відповідей та тем, які я читав з цього питання.
Руй

37
:-D setImeVisibility(hasFocus)?
Маттіас

Я спробував цей метод, оскільки насправді "прокручував власний погляд" (не хотів цього робити, але були причини). Це працювало для мене, за винятком запуску діяльності. Я додав android: windowSoftInputMode = "alwaysVisible" до діяльності та вже мав виклик requestFocus () у тексті редагування. Працює як чемпіон.
javahead76

Будь-яка ідея про необхідність видалення викликів (mShowImeRunnable)? Я думав, що після того, як буде вибрано біг для запуску з черги, він буде вилучений із черги одночасно?
Чак Ян Чен

1
Спробувавши кілька варіацій, це був єдиний, який стабільно працював для мене (Android 4.42). Thx
Джон Дж. Сміт

34

android:windowSoftInputMode="stateAlwaysVisible" -> у файлі маніфесту.

edittext.requestFocus(); -> в коді.

Це відкриє м'яку клавіатуру, на якій текст редагування має фокус запиту, як з'являється діяльність.


2
Відкрийте клавіатуру під час створення активності.
xpto

не відповідає на питання, але допоміг мені :)
S.Thiongane

відкривається ключ без запиту фокусування в api 22
David

Добре працює для моєї справи. Цікаво, чому в атрибуті фокусування запиту саме від xml також потрібно згадати manifest!
sud007

30

Нещодавно мені пощастило в деяких простих випадках із наведеним нижче кодом. Я не закінчив усі тестування, але ....

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));

І попередньо з'явиться клавіатура.


У моєму випадку у мене була кнопка, щоб додати додаткову інформацію. У обробнику кнопки.onClick вищевказаний код був доданий, щоб змусити появу м'якої клавіатури для введення додаткової інформації. Дроїд 2.2.2
Дент

Це хороше рішення, але не забувайте, що вам слід створити об’єкт MotionEvent і викликати recycle () після використання, щоб їх потім повторно використовував абонент.
jimbob

Вам просто потрібна одна dispatchTouchEvent () з ACTION_UP як її аргумент ..
Мохаммед

15

Ви можете спробувати змусити появу м'якої клавіатури, вона працює для мене:

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

1
Це працює для мене ... Я спробував ці InputMethodManager imm = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE); im.showSoftInput (ім'я, вхідMethodManager.SHOW_IMPLICIT); або getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); але жоден з них не працював.
Günay Gültekin

10

Іноді відповідь raukodraug не спрацює. Я роблю це таким чином з деякими випробуваннями та помилками:

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);
    }
}

І частина EditText :

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

1
Це єдине рішення, яке працювало для мене на Android 5
user1021430

10

Щоб приховати клавіатуру, використовуйте цю:

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

і показати клавіатуру:

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

Для DialogFragment ви можете викликати це в заміненому порядку onStart(), а ви можете використовувати його getDialog().getWindow()як альтернативу getActivity().getWindow().
Містер-ІДЕ

10

А для Kotlin просто використовуйте це розширення:

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)
}

саме те, що я шукав.
lasec0203

8

Для фрагмента переконайтеся, що він працює:

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

7

showSoftInput взагалі не працював на мене.

Я подумав, що мені потрібно встановити режим введення: (тут, в компоненті Activity в маніфесті)

android:windowSoftInputMode="stateVisible" 

6

Повірте чи ні, мою проблему з Soft Keyboard було вирішено, коли я виявив, що анімація "Activity" може відключити "Soft" клавіатуру. Коли ви телефонуєте про наміри за допомогою

i.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);

і

overridePendingTransition(0, 0);

Він може приховати м'яку клавіатуру, і немає способу її показати.


6

У мене була однакова проблема в різних різних ситуаціях, і рішення, в яких я знайшов роботу в одних, але не працюю в інших, ось ось комбіноване рішення, яке працює в більшості ситуацій, я знайшов:

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);
                }
            });
        }
    }
}

6
editText.post(new Runnable() {
    @Override
    public void run() {
        InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
    }
});

6

Я поєднав тут усе, і для мене це працює:

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();
    }
}

6

Це працювало для мене. Ви можете спробувати також показати клавіатуру:

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

5

фрагмент коду . .

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);
        }
    });
}

5

Kotlin розширення для показу клавіатури на фокусі.

Це поєднання попередніх відповідей, які або занадто довгі, або неповні.

Це розширення розміщує в черзі повідомлень, що відображається на м'якій клавіатурі після запиту на фокус:

fun View.showSoftKeyboard() {
    post {
        if (this.requestFocus()) {
            val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            imm?.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
        }
    }
}

Після цього зателефонуйте з будь-якого представлення даних:

editText.showSoftKeyboard()


4
final InputMethodManager keyboard = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

4

Всередині вашого маніфесту:

android:windowSoftInputMode="stateAlwaysVisible"- спочатку запущена клавіатура. android:windowSoftInputMode="stateAlwaysHidden" - спочатку прихована клавіатура.

Мені подобається використовувати ще й "adjustPan"тому, що коли клавіатура запускається, то екран автоматично налаштовується.

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

4

Просто додайте цей рядок у свій перегляд EditText:

android:isScrollContainer="true"

і TADA - клавіатура почала відображатися автоматично!

У мене була подібна проблема і я виявив це просте і дивне рішення.

Як уже згадував тут користувач3392439, поява клавіатури при фокусі якось суттєво пов'язане з представленням компонента прокрутки у файлі XML.

Навіть наявність іншого перегляду EditText, що містить вищезазначений рядок у тому ж XML, робить клавіатуру з'явою незалежно від того, який з редакторів EditTexts зараз зосереджений.

Якщо у вашому XML-файлі принаймні один видимий вид, що містить компонент прокрутки, клавіатура автоматично з’явиться у фокусі.

Якщо прокрутки немає - тоді вам потрібно натиснути EditText, щоб відобразити клавіатуру.


Це дуже дивно, але це, безумовно, працює - я requesFocus()робив спробу зсередини обробника клацань, і це єдиний спосіб, окрім явного showSoftInput SHOW_FORCED
намалював

Святий ш * т, дякую людино. Немає поняття, чому це працює, але я протестував його на 8 пристроях різних виробників, і він працював кожен раз!
Антоніо

3

Всі рішення , наведені вище ( InputMethodManager взаємодії в OnFocusChangeListener.onFocusChange слухача підключений до EditText працює нормально , якщо у вас є одного редагування в діяльності.

У моєму випадку я маю дві редагування.

 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);         
    }       
};

Я помітив, що onFocusChange спрацьовує для tvX з hasFocus = true (клавіатура показана), але потім для tvY з hasFocus = true (клавіатура прихована). Зрештою, жодної клавіатури не було видно.

Загальне рішення повинно мати правильне твердження, якщо "показати клавіатуру, якщо текст редагування тексту має фокус"


3

У розділі Діяльність onResume () Ви можете зателефонувати за методом doneKeyboard ();

 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;
  }

Що таке WidgetUtils.showKeyboard? Це найважливіший біт тут.
TWiStErRob

2

Жодна відповідь не працювала на мене. Ось простий спосіб.

searchEditText.setVisibility(View.VISIBLE);
                final Handler handler=new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        searchEditText.requestFocus();
                    }
                }, 400);

Щойно затримали метод requestFocus () на 400 мс.


Велике спасибі, йому потрібна певна затримка для показу клавіатури ...
hkh114

1

Я виявив дивну поведінку, оскільки в одному з моїх додатків м'яка клавіатура автоматично відображалася при введенні активності (в редакторі onCreate є editText.requestFocus ().

Покопившись далі, я виявив, що це тому, що навколо макета є ScrollView. Якщо я видаляю ScrollView, поведінка є такою, як описано в початковій заяві проблеми: лише при натисканні на вже сфокусований editText з'являється м'яка клавіатура.

Якщо це не працює для вас, спробуйте ввести ScrollView - це все одно нешкідливо.


1

У мене була подібна проблема із використанням анімаційних зображень . Тому я поставив слухач анімації, щоб переконатися, що я зачекаю, коли анімація закінчиться, перш ніж спробувати попросити доступ до клавіатури на зображеному тексті редагування.

    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

Я згоден з раукодраугом для цього, використовуючи Swithview, ви повинні запитувати / чітко фокусуватись так:

    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);
        }
    });

З повагою

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.