Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can an Android Fragment overlaying the PhoneGap Activity?

The following image should represent an PhoneGap/Cordova app which is marked in blue. The red area should be an Android Fragment.

enter image description here

Is it possible tho have an Android Fragment which overlays a PhoneGap Activity?

Edit: The overlaying Android Fragment should the tasks like image manipulation. How do I have to write a PhoneGap plugin that communicates with the Fragment?

like image 756
confile Avatar asked Jun 04 '14 11:06

confile


1 Answers

the way i did this was by writing a plugin that shows a custom dialog without border, background shadow, etc.

my execute() method looks like this:

@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.
}

and the show() method contains something like this:

[...]
    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);
[...]

if your window (the red part) has to be placed in some particular position (not in the center or at the bottom of the screen) then you have to pass coordinates from javascript to native plugin.

like image 154
pelotasplus Avatar answered Sep 20 '22 17:09

pelotasplus