尽管 autoFocus={true} 键盘没有自动打开

Keyboard is not opening automatically though autoFocus={true}

我在 ModalautoFocus={true} 中有一个 TextInput。一旦 Modal 打开,TextInput 就会自动聚焦,但键盘不会打开 automatically.And 令人惊讶的是,这是随机发生的。有时键盘会打开,有时不会。这在模拟器和真实设备中都会发生。

有什么克服这种行为的建议吗?谢谢。

虽然需要检查,

// Keyboard IpM
 InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);

// input is TextInputEditText in here.
// adding a listener 
input.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean isFocused) {

        if (isFocused) {
            imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
        } 
    }
});

你可以试试focus方法。像这样;

focus() {
   this.textInputRef.focus();
}


render() {
    return (
      <TextInput
        ref={ref => {
          this.textInputRef = ref;
        }}       
      />
    );
}

现在您可以随时调用 focus 函数。它将专注于文本输入并立即打开键盘。

只要模态框可见,您就可以使用引用将焦点传递给 TextInput

<Modal onShow={() => {this.textInput.focus()}} > 
    <TextInput ref={input => {this.textInput = input}} />
</Modal>

我目前遇到了同样的问题。我之前使用了 saumil 和其他人建议的解决方案;但针对功能组件进行了调整:

import React, { useRef } from 'react';
...
let textInput = useRef(null);
<Modal onShow={() => { textInput.focus(); }} ...>
   <TextInput ref={(input) => { textInput = input; }} ... />
</Modal>

它有效,但我不太清楚我在做什么(欢迎解释)。重要的是删除 autoFocus={true} 以获得一致的结果。

这段代码对我有用。使用 android:focusedByDefault="true"

    <com.google.android.material.textfield.TextInputLayout
    style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Email">

<com.google.android.material.textfield.TextInputEditText
    android:layout_width="match_parent"
    android:focusedByDefault="true" />

</com.google.android.material.textfield.TextInputLayout>