ซอฟต์คีย์บอร์ด Android ไม่ปรากฏในโปรแกรมจำลอง


86

ฉันเพิ่งเคยใช้ Android ฉันใช้เวลาสองชั่วโมงในการค้นหาแล้ว สิ่งที่ฉันลองใช้ซอฟต์คีย์จะไม่ปรากฏสำหรับEditTextไฟล์. ฉันสร้างมันขึ้นมาง่ายๆ:

EditText editText = (EditText)findViewById(R.id.editText);

ฉันเหนื่อย:

 editText.requestFocus();//i tried without this line too
 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

และ:

editText.setOnFocusChangeListener(new OnFocusChangeListener() {

         @Override
         public void onFocusChange(View v, boolean hasFocus) 
         {    

                     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                     imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

         }
     });

ฉันยังลอง:

getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);

ฉันลองใส่บรรทัดนี้ลงในAndroidManifest.xmlไฟล์:

 android:windowSoftInputMode="stateVisible|adjustResize"

แต่ทั้งหมดก็ไร้ผล มันไม่เคยแสดง ฉันขาดอะไรไป?


แป้นพิมพ์เปิดอยู่ในแอปพลิเคชันอื่นหรือไม่
Niranj Patel

ลองใช้สิ่งนี้แทน imm.showSoftInput (editText, InputMethodManager.SHOW_IMPLICIT); สิ่งนี้เพื่อ imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, 0);
Aravin

@CapDroid ไม่น่าเสียดาย ฉันลองใช้แอปพลิเคชั่นอื่น แต่ยังไม่มีโชค
Andrey Chernukha

@Aravinth ยังไม่ทำงาน
Andrey Chernukha

คุณใช้โปรแกรมจำลองหรืออุปกรณ์
Aravin

คำตอบ:


211

คุณต้องให้แน่ใจว่าจำลองของคุณไม่ได้ตั้งค่าการใช้แป้นพิมพ์ฮาร์ดแวร์ สามารถทำได้โดยเลือกEditโปรแกรมจำลองที่เลือกใน AVD จากนั้นยกเลิกการเลือกการHardware keyboard presentตั้งค่า

นอกจากนี้คุณยังสามารถลองใช้โปรแกรมจำลองที่แตกต่างกันเช่นGenymotion รองรับการเร่งด้วยฮาร์ดแวร์เต็มรูปแบบ (CPU แบบมัลติคอร์และ GPU) และทำงานได้เร็วกว่าอิมเมจโปรแกรมจำลอง Android หากคุณใช้ Genymotion คุณจะต้องปิดการใช้งานแป้นพิมพ์ฮาร์ดแวร์ภายใน Android (ดูรายละเอียดด้านล่าง)

แป้นพิมพ์ฮาร์ดแวร์ปิดการใช้งานใน Genymotion:
ไปที่Settings-> Language & inputและเปิดรายการภายใต้Default Keyboard & Input MethodsมีการHardwareตั้งค่าที่คุณสามารถสลับเปิด / ปิดได้ เมื่อมันเป็นเกี่ยวกับการที่คุณใช้แป้นพิมพ์กายภาพของคุณและเมื่อมันออกจากแป้นพิมพ์อ่อนมาตรฐานจะปรากฏขึ้นเมื่อใดก็ตามที่ฟิลด์ข้อความโดนโฟกัส

ภาพหน้าจอสำหรับการตั้งค่า Genymotion: รายการเริ่มต้น

ป้อนคำอธิบายภาพที่นี่


4
ในที่สุด! ขอบคุณมาก. ฉันหวังว่าฉันจะโหวตให้คำตอบของคุณสองครั้ง สำหรับ Genymotion - ฉันใช้เวลาหนึ่งวันในการพยายามตั้งค่า แต่มันไม่ได้ผล ฉันเขียนถึงการสนับสนุนของพวกเขาไม่ได้
Andrey Chernukha

ดีใจที่ได้ช่วยเหลือ :) สำหรับ Genymotion พวกเขามีการปรับปรุงอย่างต่อเนื่อง แต่ยังคงเป็นตัวอย่าง / เบต้า อย่างไรก็ตามตั้งแต่ฉันเริ่มใช้ฉันก็ไม่ได้มีปัญหาอะไรเลย อาจเป็นได้ว่าฉันเพิ่งเริ่มต้นเมื่อพวกเขาจัดการปัญหาส่วนใหญ่ได้ - หรือฉันโชคดี :) ที่กล่าวว่าโปรแกรมจำลอง android มีรูปแบบที่หลากหลายมากขึ้นดังนั้นฉันจึงยังคงใช้มันเพื่อทดสอบความเข้ากันได้
free3dom

เยี่ยมมากตอนนี้ฉันมีแป้นพิมพ์เสมือนแล้ว! แต่ฉันมี EditText กับ android: inputType = "numberDecimal"> และแป้นพิมพ์เสมือนไม่ได้เขียนตัวเลข เครื่องตรวจตัวสะกดปิดอยู่แล้ว ...
Michele

ดูวิธีแก้ปัญหาที่เป็นไปได้ที่นี่
free3dom

@ free3dom ~ "open the Default item under Keyboard & Input Methods" นั่นคืออะไร? ฉันไม่เห็นรายการนั้น
IgorGanapolsky

73

ในเวอร์ชัน 2.1.1 - คลิกที่การตั้งค่าอุปกรณ์เสมือนของคุณจากนั้นเลือกช่องทำเครื่องหมาย "ใช้แป้นพิมพ์เสมือนสำหรับการพิมพ์" ป้อนคำอธิบายภาพที่นี่

ป้อนคำอธิบายภาพที่นี่


2

มีสองที่ในการยกเลิกการเลือกแป้นพิมพ์ฮาร์ดแวร์ใน AS 1.1.0 สิ่งนี้ไม่เพียงพอ:

ป้อนคำอธิบายภาพที่นี่

ต้องทำสิ่งนี้ (คลิกTools | Android | AVD Managerจากนั้นสร้างใหม่หรือแก้ไข AVD เก่าแล้วคลิกShow Advanced Settingsเลื่อนลงและล้างEnable keyboard input):

ป้อนคำอธิบายภาพที่นี่


ฉันใช้เวลาค้นหาวิธีแก้ปัญหานี้เนื่องจากตัวบ่งชี้การเลื่อนหายไปตามปกติและจะปรากฏขึ้นเมื่อคุณเริ่มเลื่อนเท่านั้น ฉันอยากจะแนะนำว่าหากมุมมองสามารถเลื่อนได้เพื่อให้มีการบ่งชี้ความเป็นไปได้นั้นด้วยสายตา
GregM

ใช้งานไม่ได้สำหรับฉันใน Android Studio ฉันยกเลิกการเลือก "เปิดใช้งานการป้อนข้อมูลแป้นพิมพ์" แต่โปรแกรมจำลองยังไม่แสดงแป้นพิมพ์ซอฟต์แวร์
Evgenii

คุณพูดถึง "ยกเลิกการเลือก" เพียงรายการเดียว อีกอันคือ "มีแป้นพิมพ์ฮาร์ดแวร์" ดังที่แสดง - และคุณอาจล้างมันไปแล้วด้วย อาจลองใช้อุปกรณ์เสมือนอื่น ฉันพบว่าโปรแกรมจำลอง AS นั้นค่อนข้างยากที่จะทนได้ โหลดช้านิสัยใจคอแบบนี้ .... ขอให้โชคดี
DSlomer64

2

วิธีการเปิดใช้งานซอฟต์คีย์บอร์ดบนหน้าจอสำหรับ Android Studio 2+ Emulators ขึ้นอยู่กับระดับ API ของโปรแกรมจำลอง ฉันได้ทดสอบวิธีการต่างๆโดยเริ่มจาก API 15 และได้บันทึกขั้นตอนด้านล่าง

[A] API 15, 17, 19 และ 21

ขั้นตอนต่อไปนี้จะเปิดใช้งานซอฟต์คีย์บอร์ดบนหน้าจอ แต่จะปิดใช้งานความสามารถในการป้อนข้อความและโต้ตอบกับ AVD โดยใช้แป้นพิมพ์คอมพิวเตอร์ฮาร์ดแวร์

  1. ใน Android Virtual Device Manager (AVD) ให้คลิกการดำเนินการแก้ไขสำหรับอุปกรณ์ที่คุณต้องการใช้งาน
  2. คลิกแสดงการตั้งค่าขั้นสูงแล้วเลื่อนลงไปด้านล่างสุดของหน้าไปที่ส่วน "แป้นพิมพ์"
  3. ยกเลิกการเลือกตัวเลือก "เปิดใช้งานการป้อนข้อมูลด้วยแป้นพิมพ์"

[B] API 22

แป้นพิมพ์อ่อนจะปรากฏขึ้นไม่ว่าคุณจะทำอะไรกับการตั้งค่าแป้นพิมพ์ฮาร์ดแวร์ หากคุณต้องการเปิดใช้งานการรองรับคีย์บอร์ดฮาร์ดแวร์ควบคู่ไปกับซอฟต์คีย์บอร์ด

  1. ใน AVD ให้คลิกการดำเนินการแก้ไขสำหรับอุปกรณ์ที่คุณต้องการใช้งาน
  2. คลิกแสดงการตั้งค่าขั้นสูงแล้วเลื่อนลงไปด้านล่างสุดของหน้าไปที่ส่วน "แป้นพิมพ์"
  3. เลือกตัวเลือก "เปิดใช้งานการป้อนข้อมูลด้วยแป้นพิมพ์"

[C] API 23

หากคุณต้องการใช้ฮาร์ดแวร์และซอฟต์คีย์บอร์ดแล้ว ...

  1. ทำตาม [B] ขั้นตอนที่ 1 ถึง 3
  2. บนอุปกรณ์เสมือนเปิดการตั้งค่าจากนั้นเลือกภาษาและอินพุต / แป้นพิมพ์ปัจจุบัน
  3. เปิดใช้งานฮาร์ดแวร์ - แสดงวิธีการป้อนข้อมูล

หากคุณไม่ต้องการแป้นพิมพ์ฮาร์ดแวร์ในการตั้งค่าขั้นสูง AVD ให้ยกเลิกการเลือกตัวเลือก "เปิดใช้งานการป้อนข้อมูลแป้นพิมพ์" คุณไม่จำเป็นต้องเปลี่ยนการตั้งค่าใด ๆ บนอุปกรณ์เสมือน

[D] API 24 และ 25

  1. ทำตาม [B] ขั้นตอนที่ 1 ถึง 3 ด้านบนโดยเลือกหรือยกเลิกการเลือกตัวเลือก "เปิดใช้งานการป้อนข้อมูลแป้นพิมพ์" ขึ้นอยู่กับว่าคุณต้องการเปิดใช้งานแป้นพิมพ์ hardqare หรือไม่
  2. บนอุปกรณ์เสมือนเปิดการตั้งค่าจากนั้นเลือกภาษาและอินพุต / แป้นพิมพ์กายภาพ
  3. เปิดใช้งาน "แสดงแป้นพิมพ์เสมือนจริง"

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

[E] API 26

เหมือนกับ [D] API 24 และ 25 ทุกประการยกเว้นคุณต้องเลื่อนดูระดับเมนู "ระบบ" เพิ่มเติมในการตั้งค่าอุปกรณ์ก่อนที่คุณจะไปที่ภาษาและอินพุต / แป้นพิมพ์จริง


1

อาจเป็นอีมูเลเตอร์ของคุณไม่รองรับซอฟต์คีย์ ..

เพิ่มคุณสมบัติฮาร์ดแวร์คีย์บอร์ดและตั้งค่าเป็นจริงสำหรับโปรแกรมจำลองของคุณ

หากเป็นจริงอยู่แล้วให้ตรวจสอบคำตอบนี้


1

เพื่อที่จะแสดง:

EditText editText = (EditText) findViewById(R.id.myEdit);
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// only will trigger it if no physical keyboard is open
mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

และซ่อน:

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(editText.getWindowToken(), 0);

แค่ลองอันนี้ ....


ไม่ได้ช่วย แต่น่าเสียดาย
Andrey Chernukha

InputMethodManager imm = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); ... ลองสิ่งนี้
FarhaSameer786

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