From 8e8999dd7a2b5176fc956f6aa2c099103c1451fb Mon Sep 17 00:00:00 2001 From: tracy Date: Fri, 12 Jun 2020 16:33:16 +0800 Subject: [PATCH] add inputtype --- .../main/java/pub/doric/shader/InputNode.java | 20 +++++++++++- doric-demo/src/TextDemo.ts | 31 ++++++++++++++++++- doric-iOS/Pod/Classes/Shader/DoricInputNode.m | 26 +++++++++++++++- doric-js/index.d.ts | 8 +++++ 4 files changed, 82 insertions(+), 3 deletions(-) diff --git a/doric-android/doric/src/main/java/pub/doric/shader/InputNode.java b/doric-android/doric/src/main/java/pub/doric/shader/InputNode.java index 94e85926..6f6c4cb8 100644 --- a/doric-android/doric/src/main/java/pub/doric/shader/InputNode.java +++ b/doric-android/doric/src/main/java/pub/doric/shader/InputNode.java @@ -44,9 +44,9 @@ import pub.doric.extension.bridge.DoricPromise; */ @DoricPlugin(name = "Input") public class InputNode extends ViewNode implements TextWatcher, View.OnFocusChangeListener { + private final InputMethodManager mInputMethodManager; private String onTextChangeId; private String onFocusChangeId; - private final InputMethodManager mInputMethodManager; public InputNode(DoricContext doricContext) { super(doricContext); @@ -121,6 +121,24 @@ public class InputNode extends ViewNode implements TextWatcher, View.O onFocusChangeId = null; } break; + case "inputType": + if (prop.isNumber()) { + switch (prop.asNumber().toInt()) { + case 1: + mView.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL); + break; + case 2: + mView.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); + break; + case 3: + mView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); + break; + case 4: + mView.setInputType(InputType.TYPE_CLASS_PHONE); + break; + } + } + break; default: super.blend(view, name, prop); break; diff --git a/doric-demo/src/TextDemo.ts b/doric-demo/src/TextDemo.ts index f3d73525..dcd5a5e6 100644 --- a/doric-demo/src/TextDemo.ts +++ b/doric-demo/src/TextDemo.ts @@ -1,4 +1,4 @@ -import { Panel, Group, scroller, vlayout, layoutConfig, LayoutSpec, Input, Gravity, log, input, text, Color, Text } from "doric"; +import { Panel, Group, scroller, vlayout, layoutConfig, LayoutSpec, Input, Gravity, log, input, text, Color, Text, InputType } from "doric"; import { title } from "./utils"; @Entry class TextDemo extends Panel { @@ -7,6 +7,35 @@ class TextDemo extends Panel { vlayout( [ title("Text Demo"), + input({ + width : 100, + height:100, + inputType: InputType.Number, + hintText: "number" + }), + + // input({ + // width : 100, + // height:100, + // inputType: InputType.NumberSigned, + // hintText: "NumberSigned" + // }), + + // input({ + // width : 100, + // height:100, + // inputType: InputType.Alphabet, + // hintText: "Alphabet" + // }), + + // input({ + // width : 100, + // height:100, + // inputType: InputType.Phone, + // hintText: "Phone" + + // }), + text({ text: "This is normal text", }), diff --git a/doric-iOS/Pod/Classes/Shader/DoricInputNode.m b/doric-iOS/Pod/Classes/Shader/DoricInputNode.m index 73a3dea2..4b22a529 100644 --- a/doric-iOS/Pod/Classes/Shader/DoricInputNode.m +++ b/doric-iOS/Pod/Classes/Shader/DoricInputNode.m @@ -132,7 +132,31 @@ - (void)blendView:(DoricInputView *)view forPropName:(NSString *)name propValue: } else if ([name isEqualToString:@"maxLength"]) { self.maxLength = prop; - } else { + } + else if([name isEqualToString:@"inputType"]){ + switch ([prop integerValue]) { + case 1: { +// [self.view setKeyboardType: UIKeyboardTypeNumberPad ]; + break; + } + case 2: { + [self.view setKeyboardType: UIKeyboardTypeDecimalPad]; + break; + } + case 3: { + [self.view setKeyboardType: UIKeyboardTypeAlphabet]; + break; + } + case 4: { + [self.view setKeyboardType: UIKeyboardTypePhonePad]; + break; + } + default: { + break; + } + } + } + else { [super blendView:view forPropName:name propValue:prop]; } } diff --git a/doric-js/index.d.ts b/doric-js/index.d.ts index d70e5394..6fce6099 100644 --- a/doric-js/index.d.ts +++ b/doric-js/index.d.ts @@ -705,6 +705,7 @@ declare module 'doric/lib/src/widget/input' { textColor?: Color; textSize?: number; hintText?: string; + inputType?: InputType; hintTextColor?: Color; multiline?: boolean; textAlignment?: Gravity; @@ -716,6 +717,13 @@ declare module 'doric/lib/src/widget/input' { requestFocus(context: BridgeContext): Promise; releaseFocus(context: BridgeContext): Promise; } + export enum InputType { + Default = 0, + Number = 1, + NumberSigned = 2, + Alphabet = 3, + Phone = 4 + } export function input(config: Partial): Input; }