Возможный дубликат:
Как закрыть / скрыть программную клавиатуру Android?
Первым делом я уже видел эту ветку. Я попробовал приведенные там принятые методы, но у меня ничего не помогло.
У меня в приложении два экрана.
- Первый имеет 2 EditText - один для имени пользователя и один для пароля.
- У второго есть один 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);
}
}
Для упрощения
- На странице входа (первая страница) я хочу, чтобы моя клавиатура была видна при запуске.
- На SecondPage я хочу, чтобы клавиатура сначала была скрыта, чтобы отображалась только тогда, когда пользователь касается 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. Фактически, он связан с другим потоком SOF, которого я раньше не видел. Но самое забавное, что это решение дано в ветке, на которую я ссылался в начале. И я не пробовал его, потому что у него было нулевое количество голосов в ветке, где за все другие сообщения было много голосов. Высота глупости.
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
Для меня второе решение выглядело изящным, поэтому я решил придерживаться его .. Но первое, безусловно, работает. Кроме того, ответ @Dyarish содержит умный способ использования ScrollView под EditText, чтобы дать EditText фокус. Но я не пробовал, но должно работать. Хотя не изящно.
2. Чтобы скрыть клавиатуру в начале действия
У меня сработал только один ответ, который предоставил @Dyarish. И решение состоит в том, чтобы использовать настройки focusableInTouchMode в XML для макета, содержащего EditTexts. Это помогло
<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>
В любом случае, в обоих случаях я использую ответ Дьяриша. Итак, я вручаю ему награду. Спасибо всем моим друзьям, которые пытались мне помочь.