【问题标题】:Android programmatically disable autocomplete/autosuggest for EditText in emulatorAndroid以编程方式禁用模拟器中EditText的自动完成/自动建议
【发布时间】:2011-09-11 00:15:29
【问题描述】:

针对 Android 2.2

我已阅读以下问题的答案:

Turn off autosuggest for EditText?

Android: Multiline & No autosuggest in EditText

我尝试了以下建议的变体:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_FILTER);

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_FILTER | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

setInputType(InputType.TYPE_TEXT_VARIATION_NORMAL | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

setInputType(InputType.TYPE_TEXT_VARIATION_NORMAL | InputType.TYPE_TEXT_VARIATION_FILTER);

setInputType(InputType.TYPE_TEXT_VARIATION_NORMAL | InputType.TYPE_TEXT_VARIATION_FILTER | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

所有这些都适用于我测试过的大多数设备(Droid X、Droid 2、Thunderbolt、Incredible),但不适用于模拟器和至少 1 台设备(Samsung GT i5500)。

是否有任何其他方式以编程方式以模拟器和某些设备将识别和尊重的方式禁用 EditText 的自动完成/自动建议?

【问题讨论】:

  • 请记住,所有这些都只是对输入法编辑器的提示。任何输入法编辑器都不需要尊重它们。因此,几乎可以保证会有一些硬件或一些第三方 IME 无法满足请求。现在,我希望 emulator 会尊重它们,因为它具有标准输入法编辑器,但我也没有尝试过抑制建议。
  • @gyoda 你终于找到了适用于模拟器和所有设备的解决方案吗?
  • @hopia 添加 android:inputType="textVisiblePassword" 似乎适用于我的所有用例。另外,请确保您没有在模拟器中使用日文 IME。

标签: android emulation android-edittext autosuggest


【解决方案1】:

对于 Vodafone 845 (2.1)、华为 8800 (2.2) 设备,textVisiblePassword 似乎会阻止单词预测。

vendorId.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

android:inputType="textVisiblePassword"

[编辑]这个答案已经很老了,我没有环境来测试在这里获取 cmets 的最新信息,对不起。

【讨论】:

  • 请注意这一点,在非英语键盘上,这可能会禁用某些功能,例如切换语言。
  • 您正在展示如何在代码中执行此操作与在 XML 布局文件中执行此操作。但是你给出了不同数量的标志。哪个是正确的标志?
  • 以上对我不起作用。当我单击 InputText 时,它会显示建议。然后我尝试了 android:importantForAutofill="no" 它对我有用
【解决方案2】:

在布局 XML 中,将以下属性添加到您的 EditText

android:inputType="text|textNoSuggestions"

如果上述方法和上述方法都不起作用,那么这几乎肯定是模拟器和其他设备的问题,您应该直接联系制造商。

另请参阅:android:inputType(请注意,EditTextTextView 的子类,这就是为什么此属性也适用于 EditTexts)。

【讨论】:

  • Phil,我认为您的意思是活动的 xml 文件,而不是 AndroidManifest
  • 这个答案不正确,您必须在 EditText XML android:inputType="textFilter" 中添加以下属性
【解决方案3】:

我已经尝试了以上所有方法,但以上都没有真正帮助我。我搜索了可用的 InputTypes 并想出了一个解决方案,恰好是 TYPE_TEXT_FLAG_AUTO_COMPLETE

mEditText.setInputType(InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE);

从它的描述来看:

这通常意味着输入法不应该显示 候选人本身,但可以期望编辑提供自己的 来自 InputMethodSession.displayCompletions() 的完成/候选。

我没有指定任何完成设置,因此我没有收到任何自动建议

PS。上面推荐中提到的标记InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD 也可以使用此技巧,但它也会禁用在键盘中切换语言。

【讨论】:

  • 这是最合适的解决方案,其他都是hack imo
  • 所有解决方案都很老套,但我认为这是最不老套的:)
  • 如果我在 EditText 的 xml 中也提到了一些其他 inputType 怎么办,例如 textEmailAddress
  • 它有效。疯狂的。它甚至禁用了 Android-O 自动填充 UI。非常感谢
【解决方案4】:

就个人而言,这段代码对我有帮助:

autoCompleteTextView.setAdapter(null);
autoCompleteTextView.setText(address);
autoCompleteTextView.setAdapter(adapter);

我想在设置文本时禁用建议,因此我删除了适配器,并在调用 setText 后将其返回。

所以如果你想禁用建议,只需使用:

autoCompleteTextView.setAdapter(null);

【讨论】:

    【解决方案5】:

    您可以使用 AutoCompleteTextView 类并设置不包含任何内容的适配器 AutoCompleteTextView Class Reference

    例子

     public class CountriesActivity extends Activity {
       protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         setContentView(R.layout.countries);
    
         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                 android.R.layout.simple_dropdown_item_1line, COUNTRIES);
         AutoCompleteTextView textView = (AutoCompleteTextView)
                 findViewById(R.id.countries_list);
         textView.setAdapter(adapter);
       }
    
       private static final String[] COUNTRIES = new String[] {""};
     }
    

    【讨论】:

      【解决方案6】:

      使用android:inputType="textNoSuggestions|textVisiblePassword" 编辑文本修复问题。

      【讨论】:

        【解决方案7】:

        我在模拟器中遇到了同样的问题。在测试时,我意识到出现的不是正常的自动完成,而是一个特殊的亚洲字符预览(大概是因为它需要多个键来生成一个亚洲字符)。所以我通过将语言设置为英语来解决这个问题。我想我看到的是“语言和键盘”中“日语输入法”设置下列出的“按键预览”选项。

        我猜如果不深入研究键盘处理和语言支持,就很难在单个应用中禁用此功能。

        【讨论】:

          【解决方案8】:

          您可以简单地使用 EditText 的 setThreshold() 方法。当您不想显示预测时,将阈值设置为 100。如果您想重新激活显示预测,请根据需要将其设置回一个小的 int,例如 1 或 2。

          【讨论】:

          • EditText 没有 setThreshold() 方法。
          【解决方案9】:

          您还可以使用以下功能禁用任何编辑文本的自动建议。

          <EditText>
          android:inputType="textNoSuggestions|textVisiblePassword"
          </EditText>
          

          这对我有用。

          【讨论】:

            【解决方案10】:

            试试这个 android:importantForAutofill="否"

            【讨论】:

              【解决方案11】:

              输入中的'oninput'事件,运行如下函数:

              function RefreshAutoComplete(elm) {
              elm.keyup();
              elm.focus();
              }
              

              我手动运行自动完成,它可以工作

              谢谢大家的帮助

              【讨论】:

                【解决方案12】:

                接受为正确的答案是错误的。要禁用自动建议,请将以下属性添加到您的 EditText XML

                android:inputType="textFilter"
                

                【讨论】:

                • 请阅读我的完整问题。我已经尝试过 android:inputType="textFilter"。
                猜你喜欢
                • 2018-01-09
                • 1970-01-01
                • 1970-01-01
                • 2017-11-14
                • 1970-01-01
                • 2022-12-15
                • 2020-07-14
                • 2015-04-15
                • 1970-01-01
                相关资源
                最近更新 更多