Как установить фокус на вид при создании и отображении макета? - PullRequest
86 голосов
/ 28 января 2010

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

Ответы [ 16 ]

1 голос
/ 24 февраля 2017

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

1 голос
/ 28 января 2011

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

1 голос
/ 09 декабря 2010

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

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

1 голос
/ 07 октября 2010

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

1 голос
/ 28 сентября 2010

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

0 голосов
/ 12 июня 2017

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...