ปิด autosuggest สำหรับ EditText ไหม


123

มีวิธีปิดรายการแนะนำอัตโนมัติโดยใช้โปรแกรมซึ่งจะปรากฏขึ้นเมื่อคุณพิมพ์ใน EditText หรือไม่

คำตอบ:


122

ฉันมีคำถามเดียวกัน แต่ฉันยังคงต้องการตั้งค่าตัวเลือกนี้ในไฟล์ XML ของฉันดังนั้นฉันจึงทำการค้นคว้าเพิ่มเติมอีกเล็กน้อยจนกว่าฉันจะค้นพบด้วยตัวเอง

เพิ่มบรรทัดนี้ใน EditText ของคุณ

android:inputType="textFilter" 

นี่คือเคล็ดลับ ใช้บรรทัดนี้หากคุณต้องการใช้ปุ่ม "enter"

android:inputType="textFilter|textMultiLine"

มี UPVOTE ของฉัน! จริงๆแล้วสิ่งนี้ใช้ได้ดีจริงๆเมื่อคุณต้องการทำให้ EditText ดูเหมือน textView
sir_k

1
ใช้ไม่ได้กับโทรศัพท์ Android 4.4 สองเครื่อง
voghDev

API 24 / Android 7.0: ฉันแทนที่android:inputType="textPersonName"ด้วยข้อความที่แนะนำ แต่ยังคงแสดงแถวคำแนะนำ (พร้อมไอคอนไมโครโฟน)
Neph

120
android:inputType="textNoSuggestions"  

คุณควรอ่านสิ่งนี้ด้วย


5
โปรดทราบว่า "textNoSuggestions" ใช้ได้กับ API 5 ขึ้นไปเท่านั้น
glr

89
@gyller คุณเคยเห็นอุปกรณ์ที่มี API น้อยกว่า 5 หรือไม่
kreker

15
0.23% ของผู้ใช้ของฉันอยู่ใน 1.6 (API ระดับ 4) :)
Jeremy Logan

1
แม้ว่าคุณจะสูญเสียคีย์ ENTER หากคุณต้องการใช้ ENTERs android: inputType = "textNoSuggestions | textMultiLine"
barlop

3
ปิดใช้งานคำแนะนำ แต่ยังคงแสดงแถวคำแนะนำ (มีตัวเลือกไมโครโฟนอยู่ในนั้น)
VipulKumar

61
android:inputType="textVisiblePassword" 

ใช้งานได้เหมือนมีเสน่ห์


3
ฉันจะไม่ไปเส้นทางนี้ เป็นการแฮ็กและคุณไม่ได้กล่าวถึงคุณลักษณะอื่น ๆ ของแป้นพิมพ์ที่อาจเปลี่ยนแปลงเมื่อคุณบอกว่าเป็นรหัสผ่าน ใช้ "text | textNoSuggestions"
Michael Peterson

2
@ P1X3L5 textNoSuggestions ใช้ไม่ได้กับอุปกรณ์จำนวนมาก น่าเสียดายที่การแฮ็กนี้มีความจำเป็นจนกว่า Google จะแก้ไข
Tariq

1
สำหรับฉันมันดีกว่ามันยังลบแถบเหนือแป้นพิมพ์ (nexus 5) ซึ่งไม่จำเป็นต้องเป็นจริงสำหรับทุกอุปกรณ์ แต่ให้ประสิทธิภาพที่ดีกว่าสำหรับผู้ใช้บางคน (มันยังปิดความสามารถในการป้อนข้อมูลด้วยเสียง)
Arkadiusz Cieśliński

1
วิธีนี้ได้ผลเพื่อลบเครื่องหมายจุดที่.เพิ่มท้ายคำหากพิมพ์สองช่องว่างหลังคำนั้น ฉันใช้มันสำหรับแถบการดำเนินการ searchView ((SearchView) MenuItemCompat.getActionView(searchItem)) .setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
Gene Bo

นี่เป็นทางออกเดียวที่ใช้ได้ผลสำหรับฉัน คำตอบอื่น ๆ ใช้ไม่ได้เมื่อย้ายผ่านฟอร์มและกลับไปที่ฟิลด์ Google เป็นกลุ่มที่น่าสนใจ การปล่อยคุณสมบัติง่ายๆที่ไม่สมบูรณ์และผ่านการทดสอบไม่ดี
angryITguy

41

วิธีทำ:

  1. programatically
editText.inputType = InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS
  1. XML
android:inputType="textNoSuggestions"

หากคุณตั้งค่าสถานะไว้แล้วให้ทำดังนี้

  1. programatically
inputType = if (disableSuggestions) {
  InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS or inputType
} else {
  inputType and InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS.inv()
}
  1. XML
android:inputType="textNoSuggestions|textPassword"

22

วิธีที่น่าเชื่อถือที่สุดที่ฉันพบในการกำจัดการเติมข้อความอัตโนมัติคือการใช้

InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD 

บนตัวควบคุม EditText ของคุณ ดังที่ชาร์ลีได้รายงานไว้ในคำตอบอื่นในหน้านี้

android:inputType="textVisiblePassword"

เป็นเวอร์ชัน XML ของแฟล็กนี้

คุณสามารถรวมธงนี้เข้ากับ

InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS

ฉันใช้ InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS โดยไม่มี InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD ซึ่งใช้ได้กับโทรศัพท์ส่วนใหญ่ แต่แล้วฉันก็เจอโทรศัพท์ Samsung ซึ่งฉันยังคงได้รับการเติมข้อความอัตโนมัติ

Android ปิดการใช้งานการเติมข้อความอัตโนมัติ / คำแนะนำอัตโนมัติสำหรับ EditText ในโปรแกรมจำลองโดยใช้โปรแกรม

ซึ่งแนะนำให้ใช้ InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD

ฉันลองสิ่งนี้ (พร้อมกับ InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS) และใช้งานได้ คุณสามารถดูได้ว่าทำไมแม้แต่โทรศัพท์ที่ไม่อาจใช้คำใบ้ว่าคุณไม่ต้องการเติมข้อความอัตโนมัติก็ต้องยอมให้ปิดใช้งานช่องรหัสผ่าน การกลั้นหายใจไม่นานนี่อาจเป็นวิธีที่ดีที่สุดในการรับสิ่งที่เราต้องการจากโทรศัพท์รุ่นนี้

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

แม้ว่าโพสต์ที่ฉันพบคำแนะนำนี้จะเก่า แต่โทรศัพท์ที่ฉันทดสอบนั้นล่าสุด - Samsung Galaxy Note II (SPH-L900) สต็อก Android 4.1.2 จาก Sprint แป้นพิมพ์ที่เลือกคือ "Samsung Keyboard" และเห็นได้ชัดว่านี่เป็นค่าเริ่มต้นสำหรับโทรศัพท์เครื่องนี้เมื่อลูกค้าได้รับจาก Sprint ดังนั้นจึงเห็นได้ชัดว่าปัญหานี้ยังคงมีอยู่ในช่วงหลายปีที่ผ่านมาเป็นเวลาหลายปีอย่างน้อยก็มีโทรศัพท์ Samsung ที่สำคัญบางรุ่น

สำหรับพวกคุณที่ไม่มีอุปกรณ์ทดสอบของ Samsung เช่นฉันนี่อาจเป็นข้อมูลสำคัญ


3
ไม่ทำงานบน Samsung S3 กับเฟิร์มแวร์ของวันนี้ อุ่ย
ชื่อที่ปรากฏ

@SargeBorsch: คุณกำลังบอกว่า TYPE_TEXT_VARIATION_VISIBLE_PASSWORD พร้อมกับ TYPE_TEXT_FLAG_NO_SUGGESTIONS ยังคงทำการเติมข้อความอัตโนมัติใน S3 ของคุณหรือไม่ ฉันใช้แป้นพิมพ์หุ้นหรือไม่? ฉันไม่มี S3 แต่ได้ลองใช้แอปของฉัน (ซึ่งใช้วิธีการข้างต้น) ใน S3 ในอดีตและไม่มีการเติมข้อความอัตโนมัติ ฉันมี S4 ที่ใช้ Android 4.4 (Cyanogenmod) และยังไม่ทำให้สมบูรณ์อัตโนมัติ
Carl

@SargeBorsch: หากคุณต้องการลองใช้แอปที่ใช้แนวทางข้างต้นใน S3 ของคุณนี่คือของฉัน: play.google.com/store/apps/… สนใจที่จะได้ยินว่าช่อง Check Word ที่ด้านล่างของนั้น แอพ (ซึ่งใช้แฟล็กด้านบน) พยายามเติมข้อความอัตโนมัติบนอุปกรณ์ของคุณ TIA
Carl

ขอบคุณจะตรวจสอบเร็ว ๆ นี้
ชื่อที่แสดง

> "คุณกำลังบอกว่า TYPE_TEXT_VARIATION_VISIBLE_PASSWORD พร้อมกับ TYPE_TEXT_FLAG_NO_SUGGESTIONS ยังคงทำการเติมข้อความอัตโนมัติใน S3 ของคุณหรือไม่" ใช่แน่นอน แม้ว่าจะมีประเภทอีเมลด้วยก็ตามเนื่องจากเป็นอีเมลที่ป้อน…
ชื่อที่แสดง

20

สำหรับ Android เวอร์ชัน 8.0 หรือสูงกว่ารหัสนี้ไม่ทำงานและสำหรับการเติมข้อความอัตโนมัติยังรหัสนี้ไม่ทำงานดังนั้นฉันขอแนะนำให้คุณใช้รหัสด้านล่างสำหรับปิดการใช้งานคำแนะนำอัตโนมัติใน 8.0 หรือสูงกว่า android vesrion ใช้คุณสมบัตินี้ของ edittext android: importantForAutofill = "ไม่"

                   <EditText
                            android:id="@+id/name"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:enabled="false"
                            android:focusable="false"
                            android:imeOptions="actionDone"
                            android:maxLength="80"
                            android:maxLines="1"
                            android:textColor="@color/colorBlack"
                            android:textColorHint="@color/colorBlack"
                            android:importantForAutofill="no"
                            android:textSize="@dimen/_12sdp"
                            app:bFontsEdt="light" />

และสำหรับมุมมองข้อความการทำให้สมบูรณ์อัตโนมัติเช่นนี้ให้ใช้ฟิลด์นี้เพื่อปิดใช้งานคำแนะนำอัตโนมัติandroid: importantForAutofill = "no" :

      <AutoCompleteTextView
                        android:id="@+id/autocompleteEditTextView"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="@dimen/_3sdp"
                        android:layout_marginTop="@dimen/_5sdp"
                        android:background="@null"
                        android:imeOptions="actionDone"
                        android:singleLine="true"
                        android:text=""
                        android:textColor="@color/colorBlack"
                        android:textColorHint="@color/colorGrayDark"
                        android:importantForAutofill="no"
                        android:textSize="@dimen/_12sdp" />

2
! น่ากลัว นี่เป็นสิ่งเดียวที่ใช้ได้ผลสำหรับฉัน
Laurel Thomson

สิ่งเดียวที่เหมาะกับฉันขอบคุณ @MaheshKeshvala เพิ่มคะแนนเพื่อช่วยวันของฉัน
Ravi Vaniya

การเติมอัตโนมัติไม่ใช่การเติมแป้นพิมพ์อัตโนมัติ แต่เป็นคุณสมบัติที่แตกต่างกัน ระบบปฏิบัติการจัดการการเติมอัตโนมัติในขณะที่การเติมข้อความอัตโนมัติได้รับการจัดการโดยนักพัฒนาแป้นพิมพ์ (หวังว่า)
milosmns

11

คุณสามารถแก้ปัญหานี้ได้โดยใช้สิ่งนี้:

android:importantForAutofill="no" 

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


มันใช้ได้กับฉันเท่านั้น .... ขอบคุณ
Akash kumar

7

เนื่องจากยังคงเป็นปัญหาอยู่ฉันจะโพสต์คำตอบนี้ android: inputType = "textVisiblePassword" ใช้งานได้ แต่ไม่เป็นที่พึงปรารถนาประการแรกเนื่องจากเป็นการบิดเบือนความจริงของอินพุตและประการที่สองเนื่องจากปิดใช้งานการป้อนข้อมูลด้วยท่าทาง!

แต่ฉันต้องใช้แฟล็กทั้ง textNoSuggestions และ textFilter แทน อย่างใดอย่างหนึ่งเพียงอย่างเดียวไม่ได้ผล

android:inputType="textCapSentences|textFilter|textNoSuggestions"

textCapSentences เป็นเพราะเหตุผลอื่น แต่ inputType นี้ยังคงพิมพ์แบบปัดและปิดใช้งานแถบเครื่องมือคำแนะนำ


7

ฉันได้รับสิ่งนี้บนโทรศัพท์ samsung ที่ใช้ 4.4.4 สิ่งนี้ช่วยแก้ปัญหาของฉันได้

android:inputType="text|textVisiblePassword|textNoSuggestions"

เช่นเดียวกันกับ Samsung ที่ใช้ 8.1 สิ่งเดียวที่ใช้ได้ผลสำหรับฉันคือ android: inputType = "textVisiblePassword | textNoSuggestions"
Eino Gourdin

4

ตกลงปัญหาคือ - ใน Eclipse คุณไม่ได้รับคำแนะนำสำหรับแฟล็กชื่อ: textNoSuggestion

และคุณไม่สามารถตั้งค่าใน main.xml (ที่คุณออกแบบ UI) เนื่องจากไม่รู้จักแอตทริบิวต์สำหรับ inputType ดังนั้นคุณสามารถตั้งค่าเป็นรหัสโดยใช้ int const:

EditText txtTypeIt = (EditText) this.findViewById(R.id.txtTypeIt);
txtTypeIt.setInputType(524288);

และขอบคุณjasta00 ที่ช่วยฉันหาคำตอบสำหรับเรื่องนี้


6
งานนี้ ... .setInputType (InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
w.donahue

2
ตกลงใช้ค่าคงที่ไม่ใช่ค่า
David Snabel-Caunt

1
@ kape123 คุณไม่สามารถตั้งค่า android: inputType = "textNoSuggestions" ใน xml ได้เนื่องจากเป้าหมายการสร้างของคุณต่ำกว่า 5 api
kreker

โปรดทราบว่าสำหรับโทรศัพท์ Samsung บางรุ่นการเติมข้อความอัตโนมัติของแป้นพิมพ์มาตรฐานจะไม่ถูกปิดโดย InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS มีคนแนะนำให้ใช้ InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD ในโพสต์ที่ค่อนข้างเก่านี้: stackoverflow.com/questions/6281514/…
Carl


1
EditText emailTxt=(EditText)findViewById(R.id.email);
emailTxt.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

สิ่งนี้จะช่วยคุณได้


1
    // 100% correct & tested
    txtKey = (EditText) view.findViewById(R.id.txtKey);
    txtKey.setPrivateImeOptions("nm");
    txtKey.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        txtKey.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO);
    }

0

คุณสามารถใช้setThreshold()วิธีการของ EditText กำหนดเกณฑ์เป็น 100 เมื่อคุณไม่ต้องการแสดงการคาดคะเน หากคุณต้องการเปิดใช้งานการแสดงการคาดการณ์อีกครั้งให้ตั้งค่ากลับเป็น int ขนาดเล็กเช่น 1 หรือ 2 ขึ้นอยู่กับความต้องการของคุณ


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