ตั้งค่าโฟกัสเริ่มต้นในแอปพลิเคชัน Android


86

ในแอปพลิเคชัน Android ของฉันจะเน้นที่รูปแบบแรกที่Buttonฉันมีโดยอัตโนมัติโดยให้เป็นโครงร่างสีส้ม ฉันจะตั้งค่าโฟกัสเริ่มต้นให้ดีกว่าใน XML ได้อย่างไรและจะตั้งค่าเป็นอะไรได้ไหม

คำตอบ:


160

คุณสามารถใช้requestFocusแท็ก:

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

ฉันคิดว่ามันแปลกแม้ว่ามันจะโฟกัสอัตโนมัติปุ่มใดปุ่มหนึ่งของคุณ แต่ฉันไม่ได้สังเกตพฤติกรรมนั้นในมุมมองของฉันเลย


ใช่มันเกิดขึ้นกับสองแอปพลิเคชันของฉันแล้ว ฉันเดาว่าฉันสามารถ requestFocus ไปยังองค์ประกอบที่ไม่เปลี่ยนแปลงเช่น TextView หรือสิ่งนี้จะไม่ได้รับอนุญาต?
stealthcopter

1
@stealthcopter: บอกหน่อยได้ไหมว่าคุณใช้ Android เวอร์ชันไหนอยู่ ฉันใช้ 2.1 และ 2.2 แต่ requestFocus ไม่ทำงาน
anticafe

ฉันใช้มันมาแล้วทุกเวอร์ชัน แต่ปัญหาที่ฉันพบดูเหมือนจะหายไปเองดังนั้นฉันจึงไม่ได้ตรวจสอบมากนัก
stealthcopter

19
ฉันได้ลองใช้วิธี XML แล้วฉันได้ลองใช้วิธีการแบบเป็นโปรแกรม แต่ EditText ยังคงโฟกัส น่ารำคาญมาก!
ใครสักคน

4
<requestFocus /> อยู่ที่นี่: developer.android.com/guide/topics/resources/…
Erik B

65

@ มีใครบางคนฉันลองทำทุกข้อข้างต้นแล้วก็ไม่มีประโยชน์ การแก้ไขที่ฉันพบคือจาก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 (จริง); alert.getButton (AlertDialog.BUTTON_NEGATIVE) .requestFocus ();
Sagar Hatekar

2
ขอขอบคุณ! นี่เป็นทางออกเดียวที่ใช้ได้ผลในกรณีของฉัน แม้ว่าฉันจะใช้มันแตกต่างกันเล็กน้อย ฉันใส่สิ่งที่โฟกัสไว้ในRelativeLayoutไฟล์EditText.
kaka

1
ใน Android P กำลังจะมีการเปลี่ยนแปลงตามมาในแพลตฟอร์ม: "มุมมองที่มีพื้นที่ 0 (ความกว้างหรือความสูงคือ 0) จะไม่สามารถโฟกัสได้อีกต่อไปนอกจากนี้กิจกรรมจะไม่กำหนดโฟกัสเริ่มต้นโดยปริยายในโหมดสัมผัสอีกต่อไป แต่จะขึ้น ถึงคุณเพื่อขอโฟกัสเริ่มต้นอย่างชัดเจนหากต้องการ "
AustrianDude

28

ตั้งทั้งสอง:focusableและเพื่อความจริงและการโทร:focusableInTouchMode requestFocusมันไม่หลอกลวง


ใช่นี่คือทางออกที่แท้จริงในการแก้ไข ขอบคุณ Anders
gokhansari

23

ฉันพบว่าสิ่งนี้ได้ผลดีที่สุดสำหรับฉัน

ใน AndroidManifest.xml <activity> elementเพิ่มandroid:windowSoftInputMode="stateHidden"

สิ่งนี้จะซ่อนแป้นพิมพ์เสมอเมื่อเข้าสู่กิจกรรม


ง่ายและสะอาด!
SHADOW.NET

ดีมาก ... ประทับใจมาก!
gumuruh

11

ฉันเพิ่งเพิ่มบรรทัดของรหัสนี้ในonCreate():

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

แก้ไขปัญหา.


7

ใช้รหัสด้านล่าง

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

ที่ควรจะทำงาน



1
android:focusedByDefault="true"

แอตทริบิวต์focusedByDefaultใช้เฉพาะใน API ระดับ 26 และสูงกว่า (ขั้นต่ำปัจจุบันคือ 21)
AlexS
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.