Как отобразить софт-клавиатуру, когда фокус редактирования текста


461

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

  1. Когда Activityотображается my, my EditTextфокусируется, но клавиатура не отображается, мне нужно снова нажать на нее, чтобы отобразить клавиатуру (она должна отображаться, когда отображается my Activity).

  2. И когда я нажимаю «Готово» на клавиатуре, клавиатура исчезает, но EditTextостается в фокусе, и вы не хотите (потому что мое редактирование завершено).

Чтобы возобновить, моя проблема состоит в том, чтобы иметь что-то более похожее на iPhone: которое синхронизирует клавиатуру с моим EditTextсостоянием (сфокусировано / не сфокусировано) и, конечно, не предоставляет программную клавиатуру, если есть физическая.


У меня просто есть базовый EditText, например: <EditText android: id = "@ + id / myEditText" android: layout_width = "fill_parent" android: layout_height = "wrap_content" android: imeOptions = "actionDone" /> И у меня есть активность this: EditText editTxt = (EditText) findViewById (R.id.myEditText); editTxt.requestFocus ();
— Людовик Ландри

2
Это помогло мне лучше, чем любой другой ответ в этом сообщении: stackoverflow.com/a/2418314/1491212
— Armel Larcier

Ответы:


629

Чтобы заставить программную клавиатуру появляться, вы можете использовать

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, возможно, выполнение вызова requestFocus над текстом редактирования перед показом мягкого ввода может решить вашу проблему. Это для меня.
— r1k0

18
@AbdellahBenhammou, сделайте это в onCreate (): getDialog (). GetWindow (). SetSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
— Филипп

22
Работал только в сочетании с yourEditText.requestFocus()описанным здесь: stackoverflow.com/questions/8991522/…
— Вивек Пандей,

231

У меня такая же проблема. Сразу после изменения editText VISIBILITY с 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. Решение Раукодрауга работает на меня. Искал зависимость от версии, но не смог ее найти.
— Хьюго Логманс

2
Это работало для меня в Android 4.4.2. Метод InputMethodManager, выбранный в качестве решения для этого поста, не работал для меня.
— Фил

после использования метода в ответе я добавил это, и это сработало, но без него не сработало. спасибо
— Мэнни265

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
не заставляйте это. в некоторых случаях при переходе с переднего на задний план клавиатура остается там, потому что вы ее принудительно нажимаете. это проблема фрагментации, но я видел это на самсунге дуэтов.
— j2emanue

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

Это сработало, но при переходе на другие экраны оно все равно остается открытым
— Sithu

75

Следующий код разграблен из исходного кода Google 4.1 для 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);
        }
    }
}

Затем, кроме того, следующий код должен быть добавлен при создании элемента управления / действия. (В моем случае это сложный контроль, а не деятельность).

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). Спасибо
— Джон Дж. Смит

34

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

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

Это откроет программную клавиатуру, на которой текст редактирования имеет фокус запроса, когда появляется активность.


2
Это откроет клавиатуру при создании Активности.
— xpto

не отвечает на вопрос, но помог мне :)
— S.Thiongane

открывает ключ без requestfocus в API 22
— Дэвид

Работает нормально для моего случая. Интересно, почему атрибут focus запроса только из 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));

И Presto клавиатура обнаруживается.


Для моего случая у меня была кнопка для добавления дополнительной информации. В обработчик button.onClick вышеуказанный код был добавлен, чтобы заставить программную клавиатуру появляться для ввода дополнительной информации. Droid 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); imm.showSoftInput (name, inputMethodManager.SHOW_IMPLICIT); или getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); но никто из них не работал.
— Гюнай Гюльтекин

10

Иногда ответ Раукодрауга не работает. Я сделал это таким образом с некоторыми пробами и ошибками:

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().
— Mr-IDE

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 Keyboard. Когда вы называете намерение с

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
— drew

Господи, спасибо, мужик. Понятия не имею, почему он работает, но я протестировал его на 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 (клавиатура скрыта). В конце концов, никакой клавиатуры не было видно.

Общее решение должно иметь правильное утверждение, если «показать клавиатуру, если текст EditText имеет фокус»


3

В разделе «Активность» onResume () вы можете вызвать метод приноситьKearboard ();

 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

Я согласен с raukodraug для этого, используя 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.