Ответ 1
Задайте фокус: структура будет обработана перемещение фокуса в ответ на пользователя вход. Чтобы сосредоточить внимание на конкретном view, call requestFocus()
В настоящее время у меня есть макет, который содержит Button
, a TextView
и EditText
. Когда макет будет отображаться, фокус будет автоматически установлен на EditText
, что вызовет появление клавиатуры на телефоне Android. Это не то, что я хочу. Есть ли способ, с помощью которого можно установить фокус на TextView
или ничего, когда отображается макет?
Задайте фокус: структура будет обработана перемещение фокуса в ответ на пользователя вход. Чтобы сосредоточить внимание на конкретном view, call requestFocus()
Это работает:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Вы можете попробовать просто спрятать клавиатуру. Что-то вроде этого:
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
Set
android:focusable="true"
в <EditText/>
Вы должны добавить это:
android:focusableInTouchMode="true"
Try
comp.requestFocusInWindow();
Установите android:focusable="true"
в XML файл макета,
затем requestFocus()
на вид в вашем коде
НЕТ, здесь это не работает.
Установите эти строки на OnResume
, и убедитесь, что если focusableInTouch
установлено значение true при инициализации элементов управления
<controlName>.requestFocus();
<controlName>.requestFocusFromTouch();
Чтобы установить фокус, запустите requestFocus() с помощью Handler.
private Handler mHandler= new Handler();
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout mainVw = (LinearLayout) findViewById(R.id.main_layout);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
EditText edit = new EditText(this);
edit.setLayoutParams(params);
mainVw.addView(edit);
TextView titleTv = new TextView(this);
titleTv.setText("test");
titleTv.setLayoutParams(params);
mainVw.addView(titleTv);
mHandler.post(
new Runnable()
{
public void run()
{
titleTv.requestFocus();
}
}
);
}
}
Ни один из ответов выше не работает для меня. Единственное (пусть скажем) решение заключалось в том, чтобы изменить первый TextView в отключенном EditText, который получает фокус, а затем добавляет
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
в обратном вызове onCreate, чтобы предотвратить отображение клавиатуры. Теперь мой первый EditText выглядит как TextView, но может получить начальный фокус, наконец.
Последнее предложение - правильное решение. Чтобы повторить, сначала установите android:focusable="true"
в макете xml
, затем requestFocus()
в представлении вашего кода.
Я думаю, что текстовое представление не настраивается. Попробуйте установить фокус на кнопку, например, или для установки свойства focusable в true.
вы можете добавить текст редактирования размера "0 dip" в качестве первого элемента управления в ur xml, так что это будет фокусироваться на рендеринге (убедитесь, что его фокусный и все...)
Вы можете начать с добавления android:windowSoftInputMode
к вашей активности в файле AndroidManifest.xml
.
<activity android:name="YourActivity"
android:windowSoftInputMode="stateHidden" />
Это заставит клавиатуру не показывать, но EditText
все еще имеет фокус. Чтобы решить эту проблему, вы можете установить android:focusableInTouchmode
и android:focusable
на true
в корневом представлении.
<LinearLayout android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true"
...
>
<EditText
...
/>
<TextView
...
/>
<Button
...
/>
</LinearLayout>
В приведенном выше коде убедитесь, что RelativeLayout
получает фокус вместо EditText
Фокус предназначен для выбора компонентов пользовательского интерфейса, когда вы используете что-то помимо касания (например, d-pad, клавиатура и т.д.). Любое представление может получать фокус, хотя некоторые из них не настраиваются по умолчанию. (Вы можете сделать фокусировку с помощью setFocusable(true)
и заставить ее сфокусироваться с помощью requestFocus()
.)
Однако важно отметить, что , когда вы находитесь в режиме касания, фокус отключен. Поэтому, если вы используете свои пальцы, изменение фокуса программно не делает ничего. Исключением является просмотр, который принимает входные данные из редактора ввода. Пример EditText
. Для этой особой ситуации setFocusableInTouchMode(true)
используется, чтобы позволить мягкой клавиатуре знать, куда отправить вход. По умолчанию параметр EditText
имеет этот параметр. Мягкая клавиатура автоматически появится.
Если вы не хотите, чтобы мягкая клавиатура появлялась автоматически, вы можете временно ее подавить, как отметил @abeljus:
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
Если используемый клик на EditText
должен показывать клавиатуру, тем не менее.