Программно скрыть / показать Android Soft Keyboard
Возможный дубликат:
Закройте / спрячьте мягкую клавиатуру Android
Прежде всего, я уже видел эту тему. Я пробовал принятые методы, даваемые там … Но ничто не помогло мне.
У меня есть два экрана в моем приложении.
- Использование ярлыков Java
- Какова основная цель annotations @SerializedName в андроиде с помощью GSon
- Как создать интерфейс между fragmentом и адаптером?
- Получить имя устройства Android
- Https Connection 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); } }
Для упрощения
- На странице входа (первая страница) Я хочу, чтобы моя клавиатура была видна при запуске.
- На 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 не найден?
- Как выйти из приложения Java из программы
- Может ли основной метод в Java возвращать что-то?
- Когда именно это безопасно для утечки для использования (анонимных) внутренних classов?
- Почему обращается к TextView fragmentа внутри операции, вызывая ошибку
- Writer или OutputStream?
- Поиск количества ядер в Java
- Есть ли способ разбивки запросов путем комбинирования курсоров запросов с использованием FirestoreRecyclerAdapter?
Добавьте это в свой 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); }