Weex Android SDK源码分析之Module(modal)
Posted 王永迪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Weex Android SDK源码分析之Module(modal)相关的知识,希望对你有一定的参考价值。
前言
当您来阅读这篇文章时,代表您已经是weex粉丝了,我说的对吗?(-_-) 可是您只会使用可不行,本篇博文介绍Weex Moudle中的model 使用与源码分析。
代码分析
Weex封装了一系列的model api,例如:toast, alert, confirm and prompt.
Toast
weex code
使用:
this.$call('modal', 'toast',
'message': content,
'duration': 2.0
);
Arguments:
message、duration;
example:
var modal = require('@weex-module/modal');
modal.toast('message': 'I am toast!', 'duration': 1);
android method
private Toast toast;
@WXModuleAnno
public void toast(String param)
String message = "";
int duration = Toast.LENGTH_SHORT;
if (!TextUtils.isEmpty(param))
try
param = URLDecoder.decode(param, "utf-8");
JSONObject jsObj = new JSONObject(param);
message = jsObj.optString(WXConst.MESSAGE);
duration = jsObj.optInt(WXConst.DURATION);
catch (Exception e)
WXLogUtils.e("[WXModalUIModule] alert param parse error "+WXLogUtils.getStackTrace(e));
if (TextUtils.isEmpty(message))
WXLogUtils.e("[WXModalUIModule] toast param parse is null ");
return;
if (duration > 3)
duration = Toast.LENGTH_LONG;
else
duration = Toast.LENGTH_SHORT;
if (toast == null)
toast = Toast.makeText(mWXSDKInstance.getContext(), message, duration);
else
toast.setDuration(duration);
toast.setText(message);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
1、utf-8 解码;
2、取出message值;
3、取出duration值;
4、位置居中;
alert
weex code
Arguments :
message(string): 显示内容.
okTitle(string): 确认按钮.
callback(function): 弹出回调.
Example :
var arg1 = 'I am alert!';
var arg2 = 'I am ok';
var modal = require('@weex-module/modal');
modal.alert(
message: arg1,
okTitle: arg2
, function(e)
// TODO after the alert is complete.
)
android method
@WXModuleAnno
public void alert(String param, final String callbackId)
if (mWXSDKInstance.getContext() instanceof Activity)
String message = "";
String okTitle = WXConst.OK;
if (!TextUtils.isEmpty(param))
try
param = URLDecoder.decode(param, "utf-8");
JSONObject jsObj = new JSONObject(param);
message = jsObj.optString(WXConst.MESSAGE);
okTitle = jsObj.optString(WXConst.OK_TITLE);
catch (Exception e)
WXLogUtils.e("[WXModalUIModule] alert param parse error " + WXLogUtils.getStackTrace(e));
if (TextUtils.isEmpty(message))
WXLogUtils.e("[WXModalUIModule] alert param parse is null ");
return;
AlertDialog.Builder builder = new AlertDialog.Builder(mWXSDKInstance.getContext());
builder.setMessage(message);
final String okTitle_f = TextUtils.isEmpty(okTitle) ? WXConst.OK : okTitle;
builder.setPositiveButton(okTitle_f, new OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, okTitle_f);
);
AlertDialog alertDialog = builder.create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.show();
else
WXLogUtils.e("[WXModalUIModule] when call alert mWXSDKInstance.getContext() must instanceof Activity");
1、utf-8 解码;
2、取出message值;
3、取出title值;
4、点击回调callback;
confirm
weex code
Arguments
message(string): the message that the confirm shows.
okTitle(string): the title of confirm button.
cancelTitle(string): the title of cancel button.
callback(function): callback when complete.
Example
var arg1 = 'I am alert!'
var arg2 = 'I am ok'
var arg3 = 'I am cancel'
var modal = require('@weex-module/modal');
modal.confirm(
message: arg1,
okTitle: arg2,
cancelTitle: arg3
, function(e)
nativeLog(e.status)
// TODO after the confirm is complete.
);
android method
@WXModuleAnno
public void confirm(String param, final String callbackId)
if (mWXSDKInstance.getContext() instanceof Activity)
String message = "";
String okTitle = WXConst.OK;
String cancelTitle = WXConst.CANCEL;
if (!TextUtils.isEmpty(param))
try
param = URLDecoder.decode(param, "utf-8");
JSONObject jsObj = new JSONObject(param);
message = jsObj.optString(WXConst.MESSAGE);
okTitle = jsObj.optString(WXConst.OK_TITLE);
cancelTitle = jsObj.optString(WXConst.CANCEL_TITLE);
catch (Exception e)
WXLogUtils.e("[WXModalUIModule] confirm param parse error " + WXLogUtils.getStackTrace(e));
if (TextUtils.isEmpty(message))
WXLogUtils.e("[WXModalUIModule] confirm param parse is null ");
return;
AlertDialog.Builder builder = new AlertDialog.Builder(mWXSDKInstance.getContext());
builder.setMessage(message);
final String okTitle_f = TextUtils.isEmpty(okTitle) ? WXConst.OK : okTitle;
final String cancelTitle_f = TextUtils.isEmpty(cancelTitle) ? WXConst.CANCEL : cancelTitle;
builder.setPositiveButton(okTitle_f, new OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, okTitle_f);
);
builder.setNegativeButton(cancelTitle_f, new OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, cancelTitle_f);
);
AlertDialog alertDialog = builder.create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.show();
else
WXLogUtils.e("[WXModalUIModule] when call confirm mWXSDKInstance.getContext() must instanceof Activity");
1、utf-8 解码;
2、取出message值;
3、取出cancel title值;
4、取出confirm title值;
5、点击回调callback;
prompt
weex code
Arguments
message(string): the message that the prompt shows.
okTitle(string): the title of confirm button.
cancelTitle(string): the title of cancel button.
callback(function): callback when complete.
//返回参数 状态(字符串):单击用户单击的按钮的标题。
// 数据(字符串):由用户输入的文本的值。
Example
var arg1 = 'I am prompt!'
var arg2 = 'I am ok'
var arg3 = 'I am cancel'
var modal = require('@weex-module/modal');
modal.prompt(
message: arg1,
okTitle: arg2,
cancelTitle: arg3
, function(e)
nativeLog(e.status + ', ' + e.data);
// TODO after the prompt is complete.
);
android method
@WXModuleAnno
public void prompt(String param, final String callbackId)
if (mWXSDKInstance.getContext() instanceof Activity)
String message = "";
String defaultValue = "";
String okTitle = WXConst.OK;
String cancelTitle = WXConst.CANCEL;
if (!TextUtils.isEmpty(param))
try
param = URLDecoder.decode(param, "utf-8");
JSONObject jsObj = new JSONObject(param);
message = jsObj.optString("message");
okTitle = jsObj.optString("okTitle");
cancelTitle = jsObj.optString("cancelTitle");
defaultValue = jsObj.optString("default");
catch (Exception e)
WXLogUtils.e("[WXModalUIModule] confirm param parse error " + WXLogUtils.getStackTrace(e));
if (TextUtils.isEmpty(message))
WXLogUtils.e("[WXModalUIModule] confirm param parse is null ");
return;
AlertDialog.Builder builder = new AlertDialog.Builder(mWXSDKInstance.getContext());
builder.setMessage(message);
final EditText editText = new EditText(mWXSDKInstance.getContext());
editText.setText(defaultValue);
builder.setView(editText);
final String okTitle_f = TextUtils.isEmpty(okTitle) ? WXConst.OK : okTitle;
final String cancelTitle_f = TextUtils.isEmpty(cancelTitle) ? WXConst.CANCEL : cancelTitle;
builder.setPositiveButton(okTitle_f, new OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
Map<String, Object> result = new HashMap<String, Object>();
result.put(WXConst.RESULT, okTitle_f);
result.put(WXConst.DATA, editText.getText().toString());
WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, result);
);
builder.setNegativeButton(cancelTitle_f, new OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, cancelTitle_f);
);
AlertDialog alertDialog = builder.create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.show();
else
WXLogUtils.e("when call prompt mWXSDKInstance.getContext() must instanceof Activity");
1、utf-8 解码;
2、取出message值;
3、取出cancel title值;
4、取出confirm title值;
5、点击获取输入内容回调callback;
以上是关于Weex Android SDK源码分析之Module(modal)的主要内容,如果未能解决你的问题,请参考以下文章
Weex Android SDK源码分析之Module(modal)
Weex Android SDK源码分析之Module(webview)
Weex Android SDK源码分析之Module(animation)