From b209f708f224457f235d3f250c56460cbc895c8d Mon Sep 17 00:00:00 2001 From: dos1in Date: Tue, 24 Mar 2026 16:46:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(rn):=20=E4=BF=AE=E6=AD=A3=E5=9B=A0=E4=B8=BA?= =?UTF-8?q?=20android=20=E5=8D=A0=E4=BD=8D=E7=AC=A6=E5=B1=85=E4=B8=AD?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=BC=95=E8=B5=B7=E7=9A=84=E8=BD=AF=E9=94=AE?= =?UTF-8?q?=E7=9B=98=E5=8F=B3=E4=B8=8B=E8=A7=92=E6=8C=89=E9=92=AE=E8=A1=8C?= =?UTF-8?q?=E4=B8=BA=E5=BC=82=E5=B8=B8=E7=9A=84=E9=97=AE=E9=A2=98=20(#2422?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/runtime/components/react/mpx-input.tsx | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/webpack-plugin/lib/runtime/components/react/mpx-input.tsx b/packages/webpack-plugin/lib/runtime/components/react/mpx-input.tsx index 66405eb60a..1daab812db 100644 --- a/packages/webpack-plugin/lib/runtime/components/react/mpx-input.tsx +++ b/packages/webpack-plugin/lib/runtime/components/react/mpx-input.tsx @@ -473,7 +473,10 @@ const Input = forwardRef, FinalInputProps // React Native 的 TextInput 在 textAlign center + placeholder 时光标会跑到右边 // 这个问题只在 Android 上出现 // 参考:https://github.com/facebook/react-native/issues/28794 (Android only) - const needMultilineFix = isAndroid && !multiline + const needMultilineFix = isAndroid && !multiline && !!props.placeholder && normalStyle.textAlign === 'center' + // 语义上的多行(textarea),排除 needMultilineFix 强制开启的假多行 + const effectiveMultiline = multiline && !needMultilineFix + const multilineFixProps = needMultilineFix ? { multiline: true, numberOfLines: 1 } : {} const innerProps = useInnerProps( extendObject( @@ -494,11 +497,11 @@ const Input = forwardRef, FinalInputProps autoFocus: isAutoFocus, selection: selectionStart > -1 || typeof cursor === 'number' ? selection : undefined, selectionColor: cursorColor, - blurOnSubmit: multiline ? confirmType !== 'return' : !confirmHold, + submitBehavior: effectiveMultiline ? (confirmType === 'return' ? 'newline' : 'blurAndSubmit') : (confirmHold ? 'submit' : 'blurAndSubmit'), underlineColorAndroid: 'rgba(0,0,0,0)', textAlignVertical: textAlignVertical, placeholderTextColor: placeholderStyle?.color, - multiline: multiline || needMultilineFix, + multiline: effectiveMultiline, onTouchStart, onTouchEnd, onFocus, @@ -508,8 +511,8 @@ const Input = forwardRef, FinalInputProps onContentSizeChange, onSubmitEditing: bindconfirm && onSubmitEditing }, - needMultilineFix ? { numberOfLines: 1 } : {}, - !!multiline && confirmType === 'return' ? {} : { enterKeyHint: confirmType } + multilineFixProps, + (effectiveMultiline && confirmType === 'return') ? {} : { enterKeyHint: confirmType } ), [ 'type',