Программно скрыть / показать Android Soft Keyboard

Возможный дубликат:
Закройте / спрячьте мягкую клавиатуру Android

Прежде всего, я уже видел эту тему. Я пробовал принятые методы, даваемые там … Но ничто не помогло мне.

У меня есть два экрана в моем приложении.

  • У первого есть 2 EditText’s – Один для имени пользователя и один для пароля
  • Во-вторых, есть один ListView, а EditText – для фильтрации listView

На моем первом экране я хочу, чтобы имя пользователя EditText сосредоточилось на запуске, и клавиатура должна быть видимой. Это моя реализация (упрощается путем удаления ненужных / не связанных между собой кодов).

app_login.xml

    

AppLogin.java

 class AppLogin extends Activity{ private EditText mUserNameEdit = null; private EditText mPasswordEdit = null; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.app_login); mUserNameEdit = (EditText) findViewById(R.id.username); mPasswordEdit = (EditText) findViewById(R.id.password); /* code to show keyboard on startup.this code is not working.*/ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(mUserNameEdit, InputMethodManager.SHOW_IMPLICIT); }//End of onCreate() } 

Ну, клавиатура не отображается при запуске . И мой дизайн плохо требует клавиатуры там ..

Теперь на второй странице .. Я уже сказал, что у меня есть listView и EditText. Я хочу, чтобы моя клавиатура была скрыта при запуске, чтобы появляться только тогда, когда пользователь прикасается к editText. Может, вы в это верите? что бы я ни попробовал, мягкая клавиатура показывает, когда я загружаю активность. Я не могу скрыть это.

app_list_view.xml

     

AppList.java

 public class MyListActivity extends ListActivity{ private EditText mfilterEditText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.app_list_view); mFilterEditText = (EditText) findViewById(R.id.filter_edittext); InputMethodManager imm = InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mFilterEditText.getWindowToken(), 0); } } 

Для упрощения

  1. На странице входа (первая страница) Я хочу, чтобы моя клавиатура была видна при запуске.
  2. На SecondPage я хочу, чтобы клавиатура была скрыта первой, только чтобы появиться, когда пользователь коснулся editText

И моя проблема в том, что я получаю точную противоположность по обоим поводу … Надеюсь, что кто-то столкнулся с этой проблемой раньше … BTW Я тестирую симулятор и телефон HTC Desire ..

ЗАКЛЮЧИТЕЛЬНЫЙ РЕЗУЛЬТАТ

Ну, я получил его работу, с помощью всех друзей здесь.

1. Показать клавиатуру при запуске

Для меня работали два ответа. Один, предоставленный @CapDroid, который должен использовать обработчик и опубликовать его с задержкой ..

 mUserNameEdit.postDelayed(new Runnable() { @Override public void run() { // TODO Auto-generated method stub InputMethodManager keyboard = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); keyboard.showSoftInput(mUserNameEdit, 0); } },50); 

Вторые ответы предоставлены @Dyarish, на самом деле он связан с другой нитью SO, которую я раньше не видел. Но самое забавное, что это решение задано в streamе, на который я ссылался в начале. И я не пробовал это, потому что у него было нулевое количество голосов в streamе, где у всех остальных сообщений было много голосов. Высокий глупость ..

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

Для меня второе решение выглядело аккуратным, поэтому я решил придерживаться его … Но первый, безусловно, работает. Также ответ @ Dyarish содержит умный взлом использования ScrollView под EditText, чтобы дать EditText фокус. Но я не пробовал, но он должен работать. Неплохо, хотя ..

2. Скрыть клавиатуру при запуске

Для меня работал только один ответ, который предоставляет @Dyarish. И решение заключается в использовании настроек focusableInTouchMode в xml для макета, содержащего editText. Это сделало трюк

     

В любом случае, я в конечном итоге использую ответ Дьяриша в обоих случаях. Поэтому я награждаю его щедростью … Спасибо всем другим друзьям, которые пытались мне помочь ..

Добавьте это в свой android:focusableInTouchMode="true" код android:focusableInTouchMode="true" будет следить за тем, чтобы ваша клавиатура не появлялась при запуске для вашего windows edittext. Вы хотите добавить эту строку в свой линейный макет, который содержит EditTextBox. Вы должны быть в состоянии играть с этим, чтобы решить ваши проблемы. Я проверил это. Простое решение.

т.е.: в файле app_list_view.xml

     

—————— EDIT: Сделать клавиатуру при запуске ———————–

Это делается для того, чтобы клавиатура отображалась в имени пользователя edittextbox при запуске. Все, что я сделал, добавлено пустой Scrollview в конец файла .xml, это ставит первый edittext в фокус и всплывает клавиатура. Я признаю, что это взломать, но я предполагаю, что вы просто хотите, чтобы это работало. Я тестировал его, и он отлично работает.

        

Если вы ищете более красноречивое решение, я нашел этот вопрос, который может вам помочь, это не так просто, как решение выше, но, вероятно, лучшее решение. Я не тестировал его, но он, по-видимому, работает. Я думаю, что это похоже на решение, которое вы пробовали, но не работали для вас.

Надеюсь, это то, что вы ищете.

Ура!

ОБНОВЛЕНИЕ 2

 @Override protected void onResume() { super.onResume(); mUserNameEdit.requestFocus(); mUserNameEdit.postDelayed(new Runnable() { @Override public void run() { // TODO Auto-generated method stub InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); keyboard.showSoftInput(mUserNameEdit, 0); } },200); //use 300 to make it run when coming back from lock screen } 

Я очень старался и обнаружил решение … всякий раз, когда начинается новое действие, клавиатура не открывается, но мы можем использовать Runnable в onResume, и он работает нормально, поэтому попробуйте этот код и проверьте …

ОБНОВЛЕНИЕ 1

добавьте эту строку в свой AppLogin.java

 mUserNameEdit.requestFocus(); 

и эта строка в вашем AppList.java

 listview.requestFocus()' 

после этого проверьте свою заявку, если она не работает, добавьте эту строку в файл AndroidManifest.xml

   

ОРИГИНАЛЬНЫЙ ОТВЕТ

  InputMethodManager imm = (InputMethodManager)this.getSystemService(Service.INPUT_METHOD_SERVICE); 

для скрытой клавиатуры

  imm.hideSoftInputFromWindow(ed.getWindowToken(), 0); 

для шоу-клавиатуры

  imm.showSoftInput(ed, 0); 

для фокусировки на EditText

  ed.requestFocus(); 

где ed – EditText

Попробуйте этот код.

Для показа Softkeyboard:

 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if(imm != null){ imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0); } 

Для скрытия SoftKeyboard –

 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if(imm != null){ imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY); } 

Вы пробовали InputMethodManager.SHOW_IMPLICIT в первом окне.

и для скрытия во втором окне используйте InputMethodManager.HIDE_IMPLICIT_ONLY

РЕДАКТИРОВАТЬ :

Если он все еще не работает, возможно, вы помещаете его в неправильное место. Переопределите onFinishInflate() и покажите / onFinishInflate() там.

 @override public void onFinishInflate() { /* code to show keyboard on startup */ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(mUserNameEdit, InputMethodManager.SHOW_IMPLICIT); } 
  • как я могу обнаружить клавиши со стрелками в java-консоли, а не в графическом интерфейсе?
  • Прочитайте stream дважды
  • Для Android требуется уровень соответствия компилятора 5.0 или 6.0. Вместо этого найдено «1.7». Используйте Android Tools> Fix Project Properties
  • Как установить задержку в Android?
  • почему MenuItemCompat.getActionProvider возвращает значение null?
  • Создание видеофайла с изображений с помощью ffmpeg
  • Как версия Java для Android относится к версии Java SE?
  • Gson - конвертировать из Json в типизированный ArrayList
  • Как избежать% в String.Format?
  • Пример прослушивателя в Интернете для Android
  • Объем переменной, объявленной внутри цикла for
  • Interesting Posts

    Не удалось подключиться к двоичному файлу FirefoxBinary с Selenium в Maven

    Как сделать часть регулярного выражения необязательной?

    Как удалить элемент из списка по индексу в Python?

    Список как объект поддержки формы с использованием весны 3 mvc, правильный синтаксис?

    Переменные в партии не ведут себя так, как ожидалось

    Как я могу изменить учетные данные по умолчанию, используемые для подключения к Visual Studio Online (TFSPreview) при загрузке Visual Studio?

    Когда выполняется конструктор пользовательского атрибута?

    Странное использование python и / или оператора

    Определение количества вхождений каждого уникального элемента в вектор

    Когда функция слишком длинная?

    Не удается закрыть Excel.exe после процесса Interop

    Захват времени выхода функции с помощью __gnu_mcount_nc

    WooCommerce: добавьте поле ввода к каждому элементу в корзине

    Линейная диаграмма JFreeChart с текстом в каждой точке

    Linux NetworkManager не может подключиться

    Давайте будем гением компьютера.