尽管 autoFocus={true} 键盘没有自动打开
Keyboard is not opening automatically though autoFocus={true}
我在 Modal
和 autoFocus={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>
我在 Modal
和 autoFocus={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>