или же
жный дубликат:
Закрыть / скрыть программную клавиатуру Android
Первым делом первым я уже виделэто нить. Я попробовал принятые методы, данные там .. Но у меня ничего не получалось ..
У меня есть два экрана в моем приложении.
Первый из них имеет 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.javaclass 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.javapublic 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, на самом деле он связался с другой SO-темой, которую я раньше не видел. Но забавно то, что это решение дано в теме, на которую я ссылался при запуске. И я не пробовал, потому что у него было ноль голосов в ветке, где все остальные посты имеют много голосов .. Высота глупости ..
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
Для меня второе решение выглядело опрятно, поэтому я решил придерживаться его. Но первое, безусловно, работает. Кроме того, ответ @ Dyarish содержит хитрый способ использования ScrollView под EditText, чтобы придать EditText фокус ... Но я не пробовал, но он должен работать. Не аккуратно, хотя ..
2. Спрятать клавиатуру при запуске активности
У меня работал только один ответ, предоставленный @Dyarish. И решение состоит в том, чтобы использовать настройки focusableInTouchMode в 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>
В любом случае я в конечном итоге использую ответ Дьяриша в обоих случаях. Так что я присуждаю ему награду .. Спасибо всем другим друзьям, которые пытались мне помочь ..