如何在react-native中避免使用android键盘的建议

时间:2016-05-03 09:58:24

标签: react-native

我正在努力解决android中的键盘问题,当我想在文本输入中输入任何东西时它会在键盘上显示一些建议,我不想要那些建议,任何人都可以帮助我如何避免这些建议。 enter image description here

任何帮助非常感谢,来自nexus 6的上图。 这是我的TextInput代码

<TextInput
    style={styles.TextInput}
    value={this.state.currentWord}
    onChangeText={(text) => this.setState({currentWord:text.trim()})}
    placeholder="Type Your word here"
   autoCapitalize='characters'
  autoCorrect={this.state.autoCorrect}
  autoFocus={this.state.autoFocus}/>

在状态i中声明autoCorrect为false

6 个答案:

答案 0 :(得分:15)

使用autoComplete="false"时,React native将基础本机android输入类型设置为TYPE_TEXT_FLAG_NO_SUGGESTIONS并清除TYPE_TEXT_FLAG_AUTO_CORRECT,有效地告诉系统不提供任何建议(参见source code })。这是根据Android reference guides禁用文字建议的推荐方法。

问题是某些(或许多?)HTC设备似乎不遵守此设置。从我的研究来看,似乎一些三星设备可能也不支持这一点。可以合理地假设其他制造商不会尊重这种设置 - 这很糟糕。这是Android的一个大问题 - 不知何故他们没有向微软学习 - 那些肮脏的制造商会破坏你产品的可靠性,而且需要数年(大约十年)才能开始消除损害{{1} }。 (注意:我是Android粉丝)。

根据Daniels的回答,似乎有人成功地将文本类型设置为使用</rant> - 它告诉设备您的输入正用于过滤项目列表。让我们尝试修改现有的文本输入并查看它是否有效 - 然后你可以根据需要构建我们自己的文本:

  1. 您需要找到文件TYPE_TEXT_VARIATION_FILTER。从React Native文件夹中,它将位于以下路径:

    ReactTextInputManager.java
  2. 在第378行附近,您会找到一个名为[react-native]/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java 的方法 - 将其更新为以下内容:

    setAutoCorrect
  3. 构建您的应用并进行测试。如果它不起作用,请尝试从上面的代码中删除public void setAutoCorrect(ReactEditText view, @Nullable Boolean autoCorrect) { // clear auto correct flags, set SUGGESTIONS or NO_SUGGESTIONS depending on value updateStagedInputTypeFlag( view, InputType.TYPE_TEXT_FLAG_AUTO_CORRECT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS | InputType.TYPE_TEXT_VARIATION_FILTER, autoCorrect != null ? (autoCorrect.booleanValue() ? InputType.TYPE_TEXT_FLAG_AUTO_CORRECT : (InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS | InputType.TYPE_TEXT_VARIATION_FILTER)) : 0); } 包括管道)的两个实例,然后重试。如果这不起作用,我认为你运气不好。

  4. 如果 工作,那么您可以 a)指示您团队中的每个人如何在构建之前修改react本机组件(hacky和不可靠)或 b)构建您自己的文本输入组件。您应该能够复制并粘贴现有的TextInput代码,而不必编写很多本机代码 - 主要是重命名。祝你好运。

  5. 更新:进一步深入兔子洞,您也可以尝试设置InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS |。所以这里是厨房水槽 - 我假设你可以很好地阅读代码,以便使用不同的输入类型组合:

    TYPE_TEXT_VARIATION_VISIBLE_PASSWORD

    有助于理解public void setAutoCorrect(ReactEditText view, @Nullable Boolean autoCorrect) { // clear auto correct flags, set SUGGESTIONS or NO_SUGGESTIONS depending on value updateStagedInputTypeFlag( view, InputType.TYPE_TEXT_FLAG_AUTO_CORRECT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS | InputType.TYPE_TEXT_VARIATION_FILTER | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD, autoCorrect != null ? (autoCorrect.booleanValue() ? InputType.TYPE_TEXT_FLAG_AUTO_CORRECT : (InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS | InputType.TYPE_TEXT_VARIATION_FILTER | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD)) : 0); } 的方法签名如下:

    updateStagedInputTypeFlag

    更新2:您可以使用许多“输入类型”标记see a full list here。随意尝试别人 - 你可能偶然发现一个有效的。您应该可以修改上面第一次更新的代码。

答案 1 :(得分:3)

您可以将TextInput设置为将autoCorrect设置为false。

答案 2 :(得分:2)

答案 3 :(得分:2)

如果有人遇到此问题,设置 autoCorrect = false keyboardType =“ visible-password” 会将建议隐藏在android中

答案 4 :(得分:0)

我们的修复/黑客只是将输入的类型从文本更改为电子邮件并返回文本。

答案 5 :(得分:0)

我的解决方案是在可见密码时使用keyboardType = {'visible-password'}

  <TextInput
    onChangeText={onChangeText}
    label={label}
    autoCapitalize='none'
    value={password}
    secureTextEntry={isPasswordVisibile}
    keyboardType={this.state.isPasswordVisibile ? undefined : 'visible-password'}
  />