feat:Android support input
This commit is contained in:
parent
9174297980
commit
c53e223a38
@ -30,6 +30,7 @@ import pub.doric.plugin.StoragePlugin;
|
|||||||
import pub.doric.refresh.RefreshableNode;
|
import pub.doric.refresh.RefreshableNode;
|
||||||
import pub.doric.shader.HLayoutNode;
|
import pub.doric.shader.HLayoutNode;
|
||||||
import pub.doric.shader.ImageNode;
|
import pub.doric.shader.ImageNode;
|
||||||
|
import pub.doric.shader.InputNode;
|
||||||
import pub.doric.shader.ScrollerNode;
|
import pub.doric.shader.ScrollerNode;
|
||||||
import pub.doric.shader.flowlayout.FlowLayoutItemNode;
|
import pub.doric.shader.flowlayout.FlowLayoutItemNode;
|
||||||
import pub.doric.shader.flowlayout.FlowLayoutNode;
|
import pub.doric.shader.flowlayout.FlowLayoutNode;
|
||||||
@ -106,6 +107,7 @@ public class DoricRegistry {
|
|||||||
this.registerViewNode(RefreshableNode.class);
|
this.registerViewNode(RefreshableNode.class);
|
||||||
this.registerViewNode(FlowLayoutNode.class);
|
this.registerViewNode(FlowLayoutNode.class);
|
||||||
this.registerViewNode(FlowLayoutItemNode.class);
|
this.registerViewNode(FlowLayoutItemNode.class);
|
||||||
|
this.registerViewNode(InputNode.class);
|
||||||
initRegistry(this);
|
initRegistry(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
153
doric/src/main/java/pub/doric/shader/InputNode.java
Normal file
153
doric/src/main/java/pub/doric/shader/InputNode.java
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
/*
|
||||||
|
* Copyright [2019] [Doric.Pub]
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package pub.doric.shader;
|
||||||
|
|
||||||
|
import android.text.Editable;
|
||||||
|
import android.text.InputType;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
import android.text.TextWatcher;
|
||||||
|
import android.util.TypedValue;
|
||||||
|
import android.view.Gravity;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.EditText;
|
||||||
|
|
||||||
|
import com.github.pengfeizhou.jscore.JSObject;
|
||||||
|
import com.github.pengfeizhou.jscore.JSValue;
|
||||||
|
|
||||||
|
import pub.doric.DoricContext;
|
||||||
|
import pub.doric.extension.bridge.DoricMethod;
|
||||||
|
import pub.doric.extension.bridge.DoricPlugin;
|
||||||
|
import pub.doric.extension.bridge.DoricPromise;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: pub.doric.shader
|
||||||
|
* @Author: pengfei.zhou
|
||||||
|
* @CreateDate: 2019-12-06
|
||||||
|
*/
|
||||||
|
@DoricPlugin(name = "Input")
|
||||||
|
public class InputNode extends ViewNode<EditText> implements TextWatcher, View.OnFocusChangeListener {
|
||||||
|
private String onTextChangeId;
|
||||||
|
private String onFocusChangeId;
|
||||||
|
|
||||||
|
public InputNode(DoricContext doricContext) {
|
||||||
|
super(doricContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected EditText build() {
|
||||||
|
EditText editText = new EditText(getContext());
|
||||||
|
editText.addTextChangedListener(this);
|
||||||
|
editText.setOnFocusChangeListener(this);
|
||||||
|
return editText;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void blend(EditText view, String name, JSValue prop) {
|
||||||
|
switch (name) {
|
||||||
|
case "text":
|
||||||
|
view.setText(prop.asString().toString());
|
||||||
|
break;
|
||||||
|
case "textSize":
|
||||||
|
view.setTextSize(TypedValue.COMPLEX_UNIT_DIP, prop.asNumber().toFloat());
|
||||||
|
break;
|
||||||
|
case "textColor":
|
||||||
|
view.setTextColor(prop.asNumber().toInt());
|
||||||
|
break;
|
||||||
|
case "textAlignment":
|
||||||
|
view.setGravity(prop.asNumber().toInt() | Gravity.CENTER_VERTICAL);
|
||||||
|
break;
|
||||||
|
case "hintText":
|
||||||
|
view.setHint(prop.asString().toString());
|
||||||
|
break;
|
||||||
|
case "hintTextColor":
|
||||||
|
view.setHintTextColor(prop.asNumber().toInt());
|
||||||
|
break;
|
||||||
|
case "multiline":
|
||||||
|
if (prop.asBoolean().value()) {
|
||||||
|
view.setInputType(view.getInputType() | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
|
||||||
|
} else {
|
||||||
|
view.setInputType(view.getInputType() & ~InputType.TYPE_TEXT_FLAG_MULTI_LINE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "onTextChange":
|
||||||
|
if (prop.isString()) {
|
||||||
|
onTextChangeId = prop.asString().value();
|
||||||
|
} else {
|
||||||
|
onTextChangeId = null;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "onFocusChange":
|
||||||
|
if (prop.isString()) {
|
||||||
|
onFocusChangeId = prop.asString().value();
|
||||||
|
} else {
|
||||||
|
onFocusChangeId = null;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
super.blend(view, name, prop);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterTextChanged(Editable s) {
|
||||||
|
if (!TextUtils.isEmpty(onTextChangeId)) {
|
||||||
|
callJSResponse(onTextChangeId, s.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFocusChange(View v, boolean hasFocus) {
|
||||||
|
if (!TextUtils.isEmpty(onFocusChangeId)) {
|
||||||
|
callJSResponse(onFocusChangeId, hasFocus);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@DoricMethod
|
||||||
|
public String getText() {
|
||||||
|
return mView.getText().toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@DoricMethod
|
||||||
|
public void setSelection(JSObject jsObject, DoricPromise doricPromise) {
|
||||||
|
int start = jsObject.getProperty("start").asNumber().toInt();
|
||||||
|
int end = jsObject.getProperty("end").asNumber().toInt();
|
||||||
|
mView.setSelection(start, end);
|
||||||
|
doricPromise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
@DoricMethod
|
||||||
|
public void requestFocus(DoricPromise promise) {
|
||||||
|
mView.requestFocus();
|
||||||
|
promise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
@DoricMethod
|
||||||
|
public void releaseFocus(DoricPromise promise) {
|
||||||
|
mView.clearFocus();
|
||||||
|
promise.resolve();
|
||||||
|
}
|
||||||
|
}
|
@ -57,7 +57,8 @@ public class TextNode extends ViewNode<TextView> {
|
|||||||
case "textAlignment":
|
case "textAlignment":
|
||||||
view.setGravity(prop.asNumber().toInt() | Gravity.CENTER_VERTICAL);
|
view.setGravity(prop.asNumber().toInt() | Gravity.CENTER_VERTICAL);
|
||||||
break;
|
break;
|
||||||
case "numberOfLines":
|
case "maxLines":
|
||||||
|
view.setMaxLines(prop.asNumber().toInt());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
super.blend(view, name, prop);
|
super.blend(view, name, prop);
|
||||||
|
Reference in New Issue
Block a user