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 a5988e150..9a750cd7c 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.mtt.hippy.views.hippypager.HippyPager; 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 @@ public class HippyTextInputController extends HippyViewController 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 class VirtualNodeManager { // 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);