【发布时间】:2014-07-25 00:06:03
【问题描述】:
下图应代表一个以蓝色标记的 PhoneGap/Cordova 应用程序。 红色区域应该是一个 Android Fragment。
是否有可能有一个覆盖 PhoneGap Activity 的 Android 片段?
编辑:覆盖的 Android 片段应该执行图像处理等任务。 如何编写与 Fragment 通信的 PhoneGap 插件?
【问题讨论】:
下图应代表一个以蓝色标记的 PhoneGap/Cordova 应用程序。 红色区域应该是一个 Android Fragment。
是否有可能有一个覆盖 PhoneGap Activity 的 Android 片段?
编辑:覆盖的 Android 片段应该执行图像处理等任务。 如何编写与 Fragment 通信的 PhoneGap 插件?
【问题讨论】:
我这样做的方法是编写一个插件,显示一个没有边框、背景阴影等的自定义对话框。
我的 execute() 方法如下所示:
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (resources == null)
resources = cordova.getActivity().getApplication().getResources();
if (package_name == null)
package_name = cordova.getActivity().getApplication().getPackageName();
if (inflator == null) {
inflator = cordova.getActivity().getLayoutInflater();
}
if (action.equals("show")) {
this.show(args, callbackContext);
return true;
}
return false; // Returning false results in a "MethodNotFound" error.
}
show() 方法包含如下内容:
[...]
Runnable runnable = new Runnable() {
public void run() {
pinpad = new Dialog(cordova.getActivity());
pinpad.requestWindowFeature(Window.FEATURE_NO_TITLE);
Window window = pinpad.getWindow();
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
WindowManager.LayoutParams wlp = window.getAttributes();
wlp.gravity = Gravity.BOTTOM;
window.setAttributes(wlp);
pinpad.setCancelable(false);
pinpad.setContentView(view);
pinpad.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, (int) height);
pinpad.show();
}
};
this.cordova.getActivity().runOnUiThread(runnable);
[...]
如果您的窗口(红色部分)必须放置在某个特定位置(不是在屏幕中心或底部),那么您必须将坐标从 javascript 传递到本机插件。
【讨论】: