Bir Android uygulamasında ilk odağı ayarlayın


86

Android uygulamamda Button, mizanpajımda sahip olduğum ilk ekrana otomatik olarak odaklanıyor ve ona turuncu bir çerçeve veriyor. Başlangıç ​​odağını tercihen XML olarak nasıl ayarlayabilirim ve bu hiçbir şey olarak ayarlanabilir mi?

Yanıtlar:


160

requestFocusEtiketi kullanabilirsiniz :

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

Düğmelerinizden birine otomatik olarak odaklanmasına rağmen garip buluyorum, bu davranışı görüşlerimin hiçbirinde gözlemlemedim.


Evet, şimdi iki başvurumda oldu. Sanırım TextView gibi değişmeyen bir öğeye requestFocus yapabilir miyim yoksa buna izin verilmez mi?
stealthcopter

1
@stealthcopter: Hangi Android sürümünü kullandığınızı bana söyleyebilir misiniz? 2.1 ve 2.2 kullanıyorum, ancak requestFocus çalışmıyor.
anti

Bunu tüm sürümlerde kullanıyorum, ancak sorun kendiliğinden kaybolmuş gibi göründüğü için fazla araştırmadım.
stealthcopter

19
XML yaklaşımını denedim, programlı yaklaşımı denedim. Yine de EditText odağı korur. ÇOK SİNİR BOZUCU !
Someone Somewhere


65

@ Biri Bir yerde, yukarıdakilerin hepsini boşuna denedim. Bulduğum düzeltme http://www.helloandroid.com/tutorials/remove-autofocus-edittext-android'den . Temel olarak, sorunlu Düğmenin hemen üzerinde görünmez bir düzen oluşturmanız gerekir:

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

Bir AlertDialog'a odaklanmayı başardım ve dokunmatik modda odaklanabilirliği etkinleştirmek doğru yapmama yardımcı oldu. Esasen şu şekilde: alert.show (); alert.getButton (AlertDialog.BUTTON_POSITIVE) .setFocusableInTouchMode (true); alert.getButton (AlertDialog.BUTTON_NEGATIVE) .requestFocus ();
Sagar Hatekar

2
Teşekkür ederim! Bu benim durumumda işe yarayan tek çözümdü. Ben biraz farklı kullansam da; Odak maddelerini RelativeLayoutiçeren bir EditText.
kaka

1
Android P ile platforma aşağıdaki değişiklikler geliyor: "0 alana sahip görünümler (genişlik veya yükseklik 0'dır) artık odaklanılamaz. Ayrıca, etkinlikler artık dokunma modunda dolaylı olarak ilk odağı atamaz. Bunun yerine, yukarı istenirse, açıkça ilk odaklanmayı talep edebilirsiniz. "
AustrianDude

28

Hem :focusableve :focusableInTouchModedoğru olarak ayarlayın ve arayın requestFocus. Hile yapar.


Evet, düzeltmek için gerçek çözüm budur. Teşekkürler Anders
gokhansari

23

Bunun benim için en iyi şekilde çalıştığını buldum.

AndroidManifest.xml'de şunu <activity> elementekleyin:android:windowSoftInputMode="stateHidden"

Bu, aktiviteye girerken her zaman klavyeyi gizler.


Kolay ve temiz!
SHADOW.NET

harika ... bu çok etkileyici!
gumuruh

11

Sadece bu kod satırını şuraya ekliyorum onCreate():

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

Sorun çözüldü.


7

Aşağıdaki kodu kullanın,

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

bu çalışmalı.


3

@Birileri Odağı temizlemek için bunu kullandım:

editText.clearFocus();

ve yardımcı olur


1
android:focusedByDefault="true"

Özellik focusedByDefaultyalnızca API seviyesi 26 ve üzerinde kullanılır (mevcut minimum değer 21'dir).
AlexS
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.