From 1d8256604f2b100b31ce6dd2f8148ebd7a0a88cf Mon Sep 17 00:00:00 2001 From: iPel Date: Thu, 16 Nov 2023 14:26:08 +0800 Subject: [PATCH] feat(android): support padding for `TextInput` --- .../textinput/HippyTextInputController.java | 17 +++++++++-------- .../com/tencent/renderer/node/RenderNode.java | 1 + .../renderer/node/VirtualNodeManager.java | 19 ++++++++++++------- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/textinput/HippyTextInputController.java b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/textinput/HippyTextInputController.java index a5988e15053..9a750cd7cf3 100644 --- a/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/textinput/HippyTextInputController.java +++ b/renderer/native/android/src/main/java/com/tencent/mtt/hippy/views/textinput/HippyTextInputController.java @@ -50,6 +50,7 @@ import com.tencent.renderer.NativeRender; import com.tencent.renderer.NativeRenderException; import com.tencent.renderer.NativeRendererManager; +import com.tencent.renderer.component.text.TextRenderSupplier; import com.tencent.renderer.node.TextVirtualNode; import com.tencent.renderer.utils.ArrayUtils; @@ -87,14 +88,14 @@ protected View createViewImpl(Context context) { protected void updateExtra(@NonNull View view, Object object) { super.updateExtra(view, object); -// if (object instanceof TextExtra) { -// TextExtra textExtra = (TextExtra) object; -// HippyTextInput hippyTextInput = (HippyTextInput) view; -// hippyTextInput.setPadding((int) Math.ceil(textExtra.mLeftPadding), -// (int) Math.ceil(textExtra.mTopPadding), -// (int) Math.ceil(textExtra.mRightPadding), -// (int) Math.ceil(textExtra.mBottomPadding)); -// } + if (object instanceof TextRenderSupplier) { + TextRenderSupplier supplier = (TextRenderSupplier) object; + HippyTextInput hippyTextInput = (HippyTextInput) view; + hippyTextInput.setPadding((int) Math.ceil(supplier.leftPadding), + (int) Math.ceil(supplier.topPadding), + (int) Math.ceil(supplier.rightPadding), + (int) Math.ceil(supplier.bottomPadding)); + } } @HippyControllerProps(name = NodeProps.FONT_SIZE, defaultType = HippyControllerProps.NUMBER, defaultNumber = 14) diff --git a/renderer/native/android/src/main/java/com/tencent/renderer/node/RenderNode.java b/renderer/native/android/src/main/java/com/tencent/renderer/node/RenderNode.java index a180383428a..05a398354a9 100644 --- a/renderer/native/android/src/main/java/com/tencent/renderer/node/RenderNode.java +++ b/renderer/native/android/src/main/java/com/tencent/renderer/node/RenderNode.java @@ -645,6 +645,7 @@ public void updateExtra(@Nullable Object object) { component.setTextLayout(object); setNodeFlag(FLAG_UPDATE_EXTRA); } + mExtra = object; } public boolean isDeleted() { diff --git a/renderer/native/android/src/main/java/com/tencent/renderer/node/VirtualNodeManager.java b/renderer/native/android/src/main/java/com/tencent/renderer/node/VirtualNodeManager.java index 1005e7883b3..34d1a784ecb 100644 --- a/renderer/native/android/src/main/java/com/tencent/renderer/node/VirtualNodeManager.java +++ b/renderer/native/android/src/main/java/com/tencent/renderer/node/VirtualNodeManager.java @@ -138,7 +138,7 @@ public boolean updateEventListener(int rootId, int nodeId, @NonNull Map layoutInfo) { VirtualNode node = getVirtualNode(rootId, nodeId); - if (!(node instanceof TextVirtualNode) || node.mParent != null) { + if (!(node instanceof TextVirtualNode || node instanceof TextInputVirtualNode) || node.mParent != null) { return null; } float leftPadding = 0; @@ -159,12 +159,17 @@ public TextRenderSupplier updateLayout(int rootId, int nodeId, float width, // just ignore this exception LogUtils.w(TAG, "VirtualNode updateLayout get padding exception: " + e.getMessage()); } - Layout layout = ((TextVirtualNode) node) - .createLayout((width - leftPadding - rightPadding), FlexMeasureMode.EXACTLY); - // Layout has update here, not need to rebuild in end batch, so remove node ref from mUpdateNodes. - List updateNodes = mUpdateNodes.get(rootId); - if (updateNodes != null) { - updateNodes.remove(node); + final Layout layout; + if (node instanceof TextVirtualNode) { + layout = ((TextVirtualNode) node) + .createLayout((width - leftPadding - rightPadding), FlexMeasureMode.EXACTLY); + // Layout has update here, not need to rebuild in end batch, so remove node ref from mUpdateNodes. + List updateNodes = mUpdateNodes.get(rootId); + if (updateNodes != null) { + updateNodes.remove(node); + } + } else { + layout = null; } return new TextRenderSupplier(layout, leftPadding, topPadding, rightPadding, bottomPadding);