【问题标题】:Can an Android Fragment overlaying the PhoneGap Activity?可以覆盖 PhoneGap 活动的 Android 片段吗?
【发布时间】:2014-07-25 00:06:03
【问题描述】:

下图应代表一个以蓝色标记的 PhoneGap/Cordova 应用程序。 红色区域应该是一个 Android Fragment。

是否有可能有一个覆盖 PhoneGap Activity 的 Android 片段?

编辑:覆盖的 Android 片段应该执行图像处理等任务。 如何编写与 Fragment 通信的 PhoneGap 插件?

【问题讨论】:

    标签: java android cordova


    【解决方案1】:

    我这样做的方法是编写一个插件,显示一个没有边框、背景阴影等的自定义对话框。

    我的 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 传递到本机插件。

    【讨论】:

    • 你能在 github 上发布你的插件或分享更多细节吗?这段代码是否来自片段?
    • 能否请您解释一下您要做什么以及其他必须做什么才能使用您的代码?
    • 此代码在 phonegap 应用程序顶部显示原生 android 对话框。如果我理解正确,这就是你想要的?该怎么办?您必须创建一个 phonegap 插件并从 js 调用它。然后插件将在您的 phonegap 应用程序顶部显示一个对话框。
    • 我可以把所有的东西都放在一个 Android Dialog 中吗?有什么限制吗?
    • 我认为没有。 DialogFragment 也有自己的 View,是一个成熟的 Fragment。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 2013-05-18
    • 1970-01-01
    相关资源
    最近更新 更多