Программно скрыть / показать программную клавиатуру Android [дубликат]
Возможные Дубликаты:
закрыть / скрыть программную клавиатуру Android
Первое, что я уже видел этой нить. Я попробовал принятые методы, приведенные там..Но у меня ничего не получалось..
у меня есть два экрана в мое приложение.
- первый из них имеет 2 EditText - один для имени пользователя и один для пароля
- второй имеет один ListView и EditText-to фильтр
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);
}
}
для упрощения
- на странице входа (первый Страница) я хочу, чтобы моя клавиатура была видна на
запускать.. - на второй странице Я хочу, чтобы клавиатура была скрыта сначала, только чтобы появиться
когда пользователь касается editText
и моя проблема в том, что я получаю прямо противоположное в обоих случаях...Надеюсь, кто-то сталкивался с этой проблемой раньше..Кстати, я тестирую на симуляторе и телефоне 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>
в любом случае я в конечном итоге использую ответ Dyarish в обоих случаях. Поэтому я назначаю ему награду..Спасибо всем остальным друзьям
который пытался мне помочь..
4 ответов:
добавить это в ваш код
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>------------------ изменить: чтобы клавиатура появилась при запуске -----------------------
Это должно заставить их клавиатуру появиться на имени пользователя 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.javamUserNameEdit.requestFocus();и эта строка в вашем
AppList.javalistview.requestFocus()'после этого проверьте ваше приложение, если оно не работает, то добавьте эту строку в свой
AndroidManifest.xmlfile<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_ONLYEDIT:
если он все еще не работает, то, вероятно, вы ставите его в неправильном месте. Переопределить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); }
Comments