2010-04-30 4 views
76

В моем приложении для Android он автоматически фокусирует первую кнопку, которая у меня есть в моем макете, придавая ей оранжевый контур. Как настроить исходный фокус, желательно в XML, и может ли это быть ничтожным?Установите начальный фокус в приложении для Android.

ответ

140

Вы можете использовать requestFocus тег:

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

я нахожу это странным, однако, что он автоматически фокусирует один из ваших кнопок, я не наблюдал, что поведение ни в одном из моих взглядов.

+0

Да, это случилось с двумя моими приложениями. Думаю, я мог бы запроситьFocus на элемент, который не изменяется, как TextView, или это не будет разрешено? – stealthcopter

+3

Я считаю, что он будет работать на любом видении, которое может быть сфокусировано. – Matthias

+1

@stealthcopter: можете ли вы сказать, какую версию Android вы используете. Я использую 2.1 и 2.2, но requestFocus не работает. – anticafe

21

Установите и :focusable, и :focusableInTouchMode на номер true и позвоните по номеру requestFocus. Это трюк.

+1

, наконец, нашел, что это решение, спасибо – unruledboy

+0

Да, это истинное решение для его исправления. Спасибо Anders – GkhnSr

+0

Все еще не работает, когда есть EditText. – m0skit0

3

@Someone Где-то я это четкий фокус:

editText.clearFocus(); 

и это помогает

+0

Не работает в Android 2.3.3. –

54

@Someone Где-то я попробовал все выше безрезультатно. Исправление, которое я нашел, - от 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> 
+0

Мне удалось сосредоточиться на AlertDialog, и включение focusableintouchmode помогло мне исправить это. По существу, вот как: alert.show(); alert.getButton (AlertDialog.BUTTON_POSITIVE) .setFocusableInTouchMode (истина); alert.getButton (AlertDialog.BUTTON_NEGATIVE) .requestFocus(); –

+1

Спасибо! Это было ** единственным ** решением, которое работало в моем случае. Хотя я использовал его несколько иначе; Я помещал фокус в «RelativeLayout», содержащий «EditText». – kaka

6

Используйте приведенный ниже код,

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

, который должен работать.

11

Я просто добавить эту строку кода в onCreate():

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

Проблема решена.

+0

Работает в Android 2.3.3. –

17

Я нашел, что это сработало лучше для меня.

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

Это всегда скрывает клавиатуру при вводе деятельности.

+1

Удивительный .. Ты читаешь мой разум .. :) :) –