Как настроить фокус на просмотр при создании и отображении макета?

В настоящее время у меня есть макет, который содержит Button, a TextView и EditText. Когда макет будет отображаться, фокус будет автоматически установлен на EditText, что вызовет появление клавиатуры на телефоне Android. Это не то, что я хочу. Есть ли способ, с помощью которого можно установить фокус на TextView или ничего, когда отображается макет?

Ответ 1

Задайте фокус: структура будет обработана перемещение фокуса в ответ на пользователя вход. Чтобы сосредоточить внимание на конкретном view, call requestFocus()

Ответ 2

Это работает:

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

Ответ 3

Вы можете попробовать просто спрятать клавиатуру. Что-то вроде этого:

InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

Ответ 4

Set

 android:focusable="true"

в <EditText/>

Ответ 5

Вы должны добавить это:

android:focusableInTouchMode="true"

Ответ 6

Try

comp.requestFocusInWindow();

Ответ 7

Установите android:focusable="true" в XML файл макета, затем requestFocus() на вид в вашем коде

НЕТ, здесь это не работает.

Ответ 8

Установите эти строки на OnResume, и убедитесь, что если focusableInTouch установлено значение true при инициализации элементов управления

<controlName>.requestFocus();

<controlName>.requestFocusFromTouch();

Ответ 9

Чтобы установить фокус, запустите 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();
          } 
       }
     );
   }
}

Ответ 10

Ни один из ответов выше не работает для меня. Единственное (пусть скажем) решение заключалось в том, чтобы изменить первый TextView в отключенном EditText, который получает фокус, а затем добавляет

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

в обратном вызове onCreate, чтобы предотвратить отображение клавиатуры. Теперь мой первый EditText выглядит как TextView, но может получить начальный фокус, наконец.

Ответ 11

Последнее предложение - правильное решение. Чтобы повторить, сначала установите android:focusable="true" в макете xml, затем requestFocus() в представлении вашего кода.

Ответ 12

Я думаю, что текстовое представление не настраивается. Попробуйте установить фокус на кнопку, например, или для установки свойства focusable в true.

Ответ 13

вы можете добавить текст редактирования размера "0 dip" в качестве первого элемента управления в ur xml, так что это будет фокусироваться на рендеринге (убедитесь, что его фокусный и все...)

Ответ 14

Вы можете начать с добавления 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

Ответ 15

Фокус предназначен для выбора компонентов пользовательского интерфейса, когда вы используете что-то помимо касания (например, 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 должен показывать клавиатуру, тем не менее.

Дальнейшее чтение: