Встановіть початковий фокус у програмі Android


86

У моїй програмі для Android він автоматично фокусує перше, Buttonщо є в моєму макеті, надаючи йому помаранчевий контур. Як я можу встановити початковий фокус бажано в XML, і чи не можна встановити для цього значення нічого?

Відповіді:


159

Ви можете використовувати requestFocusтег:

<Button ...>
  <requestFocus />
</Button>

Мені здається дивним, що він автоматично фокусує одну з ваших кнопок, я не спостерігав такої поведінки в жодному зі своїх поглядів.


Так, це сталося з двома моїми заявками зараз. Я думаю, я міг би запитати фокус на елемент, який не змінюється, як TextView, або це не дозволено?
stealthcopter

1
@stealthcopter: підкажіть, яку версію Android ви використовуєте. Я використовую 2.1 та 2.2, але requestFocus не працює.
антикафе 05.03.11

Ну, я використовую його у всіх версіях, але проблема, з якою я стикалася, зникає сама по собі, тому я багато не досліджував.
stealthcopter

19
Я спробував підхід XML, я спробував програмний підхід. Проте EditText зберігає фокус. ДУЖЕ ДРУГО!
Хтось десь

4
<requestFocus /> знаходиться тут: developer.android.com/guide/topics/resources/…
Ерік Б,

63

@ Хтось десь, я спробував усе вищезазначене безрезультатно. Я знайшов виправлення на веб-сайті http://www.helloandroid.com/tutorials/remove-autofocus-edittext-android . В основному, вам потрібно створити невидимий макет трохи вище проблемної кнопки:

<LinearLayout android:focusable="true"
              android:focusableInTouchMode="true" 
              android:layout_width="0px"
              android:layout_height="0px" >
    <requestFocus />
</LinearLayout>

Я зміг зосередитись на AlertDialog, і включення режиму focusableintouchmode допомогло мені це правильно зробити. По суті, ось як: alert.show (); alert.getButton (AlertDialog.BUTTON_POSITIVE) .setFocusableInTouchMode (true); alert.getButton (AlertDialog.BUTTON_NEGATIVE) .requestFocus ();
Сагар Хатекар

2
Дякую! Це було єдине рішення, яке спрацювало у моєму випадку. Хоча я використовував його дещо інакше; Я помістив фокус у RelativeLayoutвміщуючий файл EditText.
kaka

1
З Android P на платформу надходять наступні зміни: "Перегляди з областю 0 (або ширина, або висота 0) більше не можна фокусувати. Крім того, дії більше не імпліцитно призначають початковий фокус у сенсорному режимі. Натомість, це Вам явно вимагати первинного фокусу, якщо потрібно ".
AustrianDude

28

Встановіть обидва значення :focusableі :focusableInTouchModeна true і викликайте requestFocus. Це робить трюк.


Так, це справжнє рішення, щоб це виправити. Спасибі Андерс
gokhansari

23

Я виявив, що це найкраще для мене працює.

В AndroidManifest.xml <activity> elementдодатиandroid:windowSoftInputMode="stateHidden"

Це завжди приховує клавіатуру під час введення дії.


Легко і чисто!
SHADOW.NET

чудово ... це дуже вражає!
гумуру

11

Я просто додаю цей рядок коду в onCreate():

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

Проблема вирішена.


Працює в Android 2.3.3.
Gaurav Agarwal

7

Використовуйте код нижче,

TableRow _tableRow =(TableRow)findViewById(R.id.tableRowMainBody);
tableRow.requestFocus();

це має спрацювати.


3

@ Хтось десь я використовував це, щоб очистити фокус:

editText.clearFocus();

і це допомагає


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.