จะลบป๊อปอัปโฟกัสอัตโนมัติ / แป้นพิมพ์ของฟิลด์เมื่อหน้าจอปรากฏขึ้นได้อย่างไร


105

ฉันมีหน้าจอที่ช่องแรกเป็น EditText และได้รับการโฟกัสเมื่อเริ่มต้นรวมทั้งป๊อปอัปประเภทการป้อนตัวเลขซึ่งน่ารำคาญมาก

ฉันจะแน่ใจได้อย่างไรว่าเมื่อเริ่มกิจกรรมแล้วโฟกัสจะไม่ได้รับและ / หรือแผงอินพุตไม่ยกขึ้น

คำตอบ:


157
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);

หรือ

ตั้งค่าคุณสมบัติกิจกรรมในไฟล์รายการดังต่อไปนี้ในแท็กแอปพลิเคชัน

android:windowSoftInputMode="stateHidden"

การตั้งค่า android: windowSoftInputMode ในไฟล์ AndroidManifest.xml สามารถ ORed ด้วยค่าอื่น ๆ โดยทั่วไปโหมดหมายถึงค่าเดียว แต่ในกรณีนี้ค่าคือชุดของแฟล็ก คำอธิบายของค่านิยม:Formats: flag Values: adjustNothing, adjustPan, adjustResize, adjustUnspecified, stateAlwaysHidden, stateAlwaysVisible, stateHidden, stateUnchanged, stateUnspecified, stateVisible Specify the default soft-input mode for the main window of this activity. A value besides "unspecified" here overrides any value in the theme.
Jeff Muir

145

ไปที่ไฟล์รายการแอปพลิเคชันของคุณและเขียนบรรทัดนี้สำหรับกิจกรรมที่คุณต้องการปิดใช้งานป๊อปอัปแป้นพิมพ์อัตโนมัติ

android:windowSoftInputMode="stateHidden"

ไม่ได้ผลสำหรับฉัน ฉันใส่ไว้ใน activity_main.xml สิ่งนี้ทำงานได้สมบูรณ์แบบเมื่อฉันใส่ไว้ใน onCreate () getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
glez

20

หากต้องการใช้แป้นพิมพ์โดยใช้โปรแกรมไม่แสดง แต่วิดเจ็ตเริ่มต้นยังคงรับสายโฟกัส:

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

ใน onResume()


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

เรียกใช้วิธีการด้านบนภายในonCreate ()ซึ่งป้องกันไม่ให้softKeyboardแสดงเว้นแต่ผู้ใช้จะเลือกEditText bytapping or clicking.

หรือเพิ่มandroid:windowSoftInputMode="stateHidden"ในแท็กกิจกรรมในManifest.xml


10

ซึ่งมักจะเป็นระเบียบ สิ่งแรกที่ฉันลองคือพยายามขโมยโฟกัสด้วยมุมมองอื่นผ่าน คุณต้องมีInTouchModeที่โฟกัสได้และโฟกัสได้

<TextView
  ...
  android:focusable="true"
  android:focusableInTouchMode="true">

    <requestFocus/>
</TextView>

นี้ได้ผล ฉันรู้สึกว่านี่เป็นแนวทางที่สะอาดกว่า แต่ก็ขึ้นอยู่กับสภาพของคุณด้วย ฉันยอมรับอันนี้
JaydeepW

5

มีมุมมองอื่นที่จับโฟกัส ตามค่าเริ่มต้นมุมมองแรกที่โฟกัสได้จะได้รับโฟกัสเมื่อเค้าโครงสูงเกินจริง คุณสามารถขอโฟกัสในมุมมองอื่นผ่าน XML:

<TextView
    android:layout_width="wrap_parent"
    android:layout_height="wrap_content"
    android:text="Some other view">

    <requestFocus />
</TextView>

สิ่งนี้ใช้ได้กับทุกมุมมอง

หากคุณต้องการทำแบบเป็นโปรแกรมคุณสามารถใช้ไฟล์ view.requestFocus()ไฟล์.


0
if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED)
{
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

3
ยินดีต้อนรับสู่ StackOverflow! ซึ่งไม่เหมือนกับฟอรัมอื่น ๆ หากคุณต้องการเปลี่ยนคำตอบเพียงคลิกeditลิงก์และทำการเปลี่ยนแปลง และโปรดพยายามที่จะจัดรูปแบบรหัสของคุณโดยการเลือกรหัสของคุณและใช้ปุ่มตัวอย่างรหัสหรือกดปุ่ม{} Ctrl+K
Peter Lang

0

การเพิ่ม android:windowSoftInputMode="stateHidden"กิจกรรมของคุณในไฟล์ Manifest จะซ่อนแป้นพิมพ์เฉพาะเมื่อคุณเปิดตัวกิจกรรมหรือตามที่ Google กล่าว

เมื่อผู้ใช้ยืนยันว่าจะไปข้างหน้าเพื่อทำกิจกรรมแทนที่จะกลับเข้าไปในกิจกรรมนั้นเนื่องจากการออกจากกิจกรรมอื่น

หากต้องการซ่อนแป้นพิมพ์เมื่อผู้ใช้กดปุ่มย้อนกลับและย้ายกลับไปที่กิจกรรมของคุณจากกิจกรรมอื่น ๆ ให้ใช้ android:windowSoftInputMode="stateAlwaysHidden"


-1

ไม่ได้ลองสิ่งนี้หรือฉันอยู่ใกล้คอมพิวเตอร์เขียนโปรแกรมของฉัน แต่ฉันสงสัยว่าการส่งโฟกัสแบบเป็นโปรแกรมไปยังมุมมองผู้ปกครองหรือบางอย่างในลักษณะนั้นอาจทำเคล็ดลับ - นั่นเป็นวิธีแก้ปัญหามากกว่าวิธีแก้ปัญหา แต่ไม่สามารถทดสอบได้อีกครั้ง ความคิด


1
ฉันพยายามแล้ว แต่ไม่ได้ผล ฉันเรียก.requestFocus();ปุ่มและยังคงเป็นป๊อปอัปของแป้นพิมพ์
Pentium10

สามารถเพิ่มความคิดเป็นความคิดเห็น
Alberto M
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.