Tetapkan fokus awal di aplikasi Android

86

Dalam aplikasi Android saya secara otomatis memfokuskan yang pertama Buttonsaya miliki di tata letak saya, memberikan garis oranye. Bagaimana cara menyetel fokus awal lebih disukai dalam XML, dan dapatkah ini disetel ke tidak ada?

stealthcopter
sumber

Jawaban:

160

Anda bisa menggunakan requestFocustag:

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

Saya merasa aneh meskipun itu memfokuskan otomatis salah satu tombol Anda, saya belum mengamati perilaku itu dalam pandangan saya.

Matthias
sumber
Ya, ini telah terjadi dengan dua aplikasi saya sekarang. Saya kira saya bisa requestFocus ke elemen yang tidak berubah seperti TextView atau apakah ini tidak diizinkan?
stealthcopter
1
@stealthcopter: dapatkah Anda memberi tahu saya versi Android mana yang Anda gunakan. Saya menggunakan 2.1 & 2.2, tetapi requestFocus tidak berfungsi.
anticafe
Saya telah menggunakannya di semua versi, tetapi masalah yang saya alami sepertinya hilang dengan sendirinya jadi saya belum banyak menyelidiki.
stealthcopter
19
Saya sudah mencoba pendekatan XML, saya sudah mencoba pendekatan programatik. Namun EditText tetap fokus. SANGAT MENYEBALKAN !
Seseorang Di Suatu Tempat
4
<requestFocus /> ada di sini: developer.android.com/guide/topics/resources/…
Erik B
65

@Someone Somewhere, saya mencoba semua hal di atas tetapi tidak berhasil. Perbaikan yang saya temukan adalah dari http://www.helloandroid.com/tutorials/remove-autofocus-edittext-android . Pada dasarnya, Anda perlu membuat tata letak yang tidak terlihat tepat di atas Tombol yang bermasalah:

<LinearLayout android:focusable="true"
              android:focusableInTouchMode="true" 
              android:layout_width="0px"
              android:layout_height="0px" >
    <requestFocus />
</LinearLayout>
Vince Lasmarias
sumber
Saya bisa mendapatkan fokus pada AlertDialog dan mengaktifkan focusableintouchmode membantu saya melakukannya dengan benar. Pada dasarnya, begini caranya: alert.show (); alert.getButton (AlertDialog.BUTTON_POSITIVE) .setFocusableInTouchMode (true); alert.getButton (AlertDialog.BUTTON_NEGATIVE) .requestFocus ();
Sagar Hatekar
2
Terima kasih! Ini adalah satu - satunya solusi yang berhasil dalam kasus saya. Meskipun saya menggunakannya sedikit berbeda; Saya meletakkan hal-hal fokus di dalam RelativeLayoutfile EditText.
kaka
1
Dengan Android P, perubahan berikut akan diterapkan pada platform: "Tampilan dengan 0 area (baik lebarnya atau tingginya 0) tidak lagi dapat difokuskan. Selain itu, aktivitas tidak lagi secara implisit menetapkan fokus awal dalam mode sentuh. Sebaliknya, naik kepada Anda untuk meminta fokus awal secara eksplisit, jika diinginkan. "
AustrianDude
28

Setel keduanya :focusabledan :focusableInTouchModeke true and call requestFocus. Itu berhasil.

Ruivo
sumber
Ya ini adalah solusi yang tepat untuk memperbaikinya. Terima kasih Anders
gokhansari
23

Saya menemukan ini bekerja paling baik untuk saya.

Di AndroidManifest.xml <activity> elementtambahkanandroid:windowSoftInputMode="stateHidden"

Ini selalu menyembunyikan keyboard saat memasuki aktivitas.

James
sumber
Mudah dan bersih!
SHADOW.NET
hebat ... ini sangat mengesankan!
gumuruh
11

Saya hanya menambahkan baris kode ini ke onCreate():

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

Masalah terpecahkan.

Sam Tang
sumber
7

Gunakan kode di bawah ini,

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

itu seharusnya berhasil.

jcw
sumber
3

@Someone Somewhere I menggunakan ini untuk fokus yang jelas:

editText.clearFocus();

dan itu membantu

Ruobin Wang
sumber
1
android:focusedByDefault="true"
TiyebM
sumber
Atribut focusedByDefaulthanya digunakan di API level 26 dan lebih tinggi (min saat ini adalah 21).
AlexS