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

Возможный дубликат:
Закрыть / скрыть Soft Soft

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

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

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

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

app_login.xml

<LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingLeft="20dip" android:paddingRight="20dip"> <EditText android:id="@+id/username" android:singleLine="true" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Username" android:imeOptions="actionDone" android:inputType="text" android:maxLines="1"/> <EditText android:id="@+id/password" android:password="true" android:singleLine="true" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Password" /> </LinearLayout> 

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

 <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <EditText android:id="@+id/filter_edittext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Search" android:inputType="text" android:maxLines="1"/> <ListView android:id="@id/android:list" android:layout_height="fill_parent" android:layout_weight="1.0" android:layout_width="fill_parent" android:focusable="true" android:descendantFocusability="beforeDescendants"/> </LinearLayout> 

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

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

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

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

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

 <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:focusableInTouchMode="true"> <EditText android:id="@+id/filter_edittext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Search" android:inputType="text" android:maxLines="1"/> <ListView android:id="@id/android:list" android:layout_height="fill_parent" android:layout_weight="1.0" android:layout_width="fill_parent" android:focusable="true" android:descendantFocusability="beforeDescendants"/> </LinearLayout> 

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

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

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

 <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:focusableInTouchMode="true"> <EditText android:id="@+id/filter_edittext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Search" android:inputType="text" android:maxLines="1"/> <ListView android:id="@id/android:list" android:layout_height="fill_parent" android:layout_weight="1.0" android:layout_width="fill_parent" android:focusable="true" android:descendantFocusability="beforeDescendants"/> </LinearLayout> 

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

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

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingLeft="20dip" android:paddingRight="20dip"> <EditText android:id="@+id/userName" android:singleLine="true" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Username" android:imeOptions="actionDone" android:inputType="text" android:maxLines="1" /> <EditText android:id="@+id/password" android:password="true" android:singleLine="true" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="Password" /> <ScrollView android:id="@+id/ScrollView01" android:layout_height="fill_parent" android:layout_width="fill_parent"> </ScrollView> </LinearLayout> 

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

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

Ура!

ОБНОВЛЕНИЕ 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

 <activity android:name=".AppLogin" android:configChanges="keyboardHidden|orientation"></activity> <activity android:name=".AppList" android:configChanges="keyboard|orientation"></activity> 

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

  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); } 
Intereting Posts
Отправка ответа от PHP на мобильное приложение Android / Java? Предварительный просмотр камеры в Android Небольшой размер шрифта в эмуляторе Android Android динамически добавляет элемент в XML-ресурс массива Тайм-аут GPS Android Как перекрыть элементы в LinearLayoutManager – RecyclerView (например, карты укладки) При использовании экрана activity.recreate () мигает черным в течение 0,5 сек. Как вернуться на рынок, когда настраиваемая схема URL-адресов Android не обрабатывается? Ошибка авторизации API Android для Google Карт – эта услуга изменилась за последние несколько месяцев? Android Live стола с OpenGL ES 2.0? Android push-уведомления в пользовательский список подписчиков темы с использованием Amazon SNS Не найден ресурс, который соответствует указанному имени: attr 'android: keyboardNavigationCluster'. При обновлении до Support Library 26.0.0 Как скрыть элемент управления увеличением в веб-браузере Android? Как зарегистрировать новую активность в AndroidManifest.xml? Дополнительные приложения WidgetProvider Intent, отправленные с нажатием кнопки, не найдены в onReceive