วันอังคารที่ 23 สิงหาคม พ.ศ. 2554

Android: Stop EditText from gaining focus at Activity startup

Android: Stop EditText from gaining focus at Activity startup
การเซ็ตค่าเพื่อไม่ให้ focus ไปจับที่ EditText ตอนเริ่มต้นของ Activity
อันนี้เป็นปัญหาการใช้ EditText ใน Activity นะครับ เช่นเราวาง EditText ไว้ด้านล่าง ส่วนด้านบนเป็นการแสดงข้อมูลด้วย TextView เมื่อเรารันโปรแกรมแล้ว ก็จะพบว่า focus จะไปจับที่ EditText ทำให้คีย์บอร์ดมันดันขึ้นมา และทำให้ข้อมูลด้านบนที่แสดงจาก TextView ไม่ถูกแสดงขึ้นมาก่อน ดังนั้นจึงต้องหาวิธีการทำให้ EditText ไม่ต้องถูก focus ตั้งแต่เริ่มแรกนั้นเอง





จากรูปด้านบนคือปัญหาของเรานั้นเอง เห็นมั้ยครับว่าเมื่อ EditText ที่อยู่ด้านล่างนั้นถูก focus แล้วทำให้ ข้อมูลด้านบนที่ควรแสดงก่อนนั้นถูกบังไป

วิธีแก้ไข เราต้องเข้าไปแก้ไขที่ xml ไฟล์ของหน้า Activity หน้านี้นะครับ (ง่ายสุด ส่วนอีกวิธีคือการเขียนโค้ดเอา) แก้ไขเพิ่มเติมดังนี้

[sourcecode langauge="xml"]
<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
android:focusable="true" android:focusableInTouchMode="true"
android:layout_width="0px" android:layout_height="0px"/>

<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView android:id="@+id/text"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:nextFocusUp="@+id/text" android:nextFocusLeft="@+id/text"/>
[/sourcecode]

1) เซ็ตค่าของ layout ที่บรรจุ edittext

[sourcecode langauge="xml"]
android:focusable="true" android:focusableInTouchMode="true"
[/sourcecode]

2) เซ็ตค่าของ edittext โดย id ของ nextFocusUp และ nextFocusLeft จะเป็น id ของ edittext ตัวที่เราต้องการปิด focus นะครับ

[sourcecode langauge="xml"]
android:nextFocusUp="@+id/text" android:nextFocusLeft="@+id/text"
[/sourcecode]

เท่านี้ก้อเรียบร้อยแล้วครับ ลองรันโปรแกรมดู



จะเห็นว่าข้อมูลด้านบนก็จะแสดงตามปกติ เมื่อเปิดเข้ามาหน้า Activity นี้ คีย์บอร์ดก้อจะไม่โผล่เข้ามาอีกต่อไป

Reference

adaydesign :)

ไม่มีความคิดเห็น:

แสดงความคิดเห็น