Через некоторое время верстка разочаровывает в android - PullRequest
0 голосов
/ 17 марта 2020

Recyclerview onitemclick содержит кнопки, названные как view pdf. Когда вы нажимаете на представление pdf, проходя позицию и вызывая createpdf (postion)

@Override
    public void myPDfItemClick(int position) {

    createPdf(position);
    }

После нажатия на кнопку pdf просмотра, одно окно, которое нужно открыть внутри окно содержит макет, называемый макетом pdf. Через некоторое время макет автоматически отключается, если я щелкаю окно.

private void createPdf(int position){
        showWindowManager();


        DisplayMetrics dm = getResources().getDisplayMetrics();
      //  wm.getDefaultDisplay().getMetrics(dm);
        int densityDpi = dm.densityDpi;

       // int height = displayMetrics.heightPixels;
        //int width = displayMetrics.widthPixels;

        int convertHighet = (int) densityDpi*5, convertWidth = (int) densityDpi*8;

        PdfDocument document = new PdfDocument();
        PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(convertWidth, convertHighet, 1).create();
        PdfDocument.Page page = document.startPage(pageInfo);
        document.finishPage(page);

        // write the document content
        String targetPdf = "/sdcard/pdffromlayout2.pdf";
        File filePath;
        filePath = new File(targetPdf);
        try {
            document.writeTo(new FileOutputStream(filePath));
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(getActivity(), "Something wrong: " + e.toString(), Toast.LENGTH_LONG).show();
        }
        // close the document
        document.close();
        Toast.makeText(getActivity(), "PDF is created!!!", Toast.LENGTH_SHORT).show();
        openGeneratedPDF();

    }



    private void openGeneratedPDF(){
        File file = new File("/sdcard/pdffromlayout2.pdf");
        if (file.exists())
        {
            Intent intent=new Intent(Intent.ACTION_VIEW);
            Uri uri = Uri.fromFile(file);
            intent.setDataAndType(uri, "application/pdf");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            try
            {
                getActivity().startActivity(intent);
            }
            catch(ActivityNotFoundException e)
            {
                Toast.makeText(getActivity(), "No Application available to view pdf", Toast.LENGTH_LONG).show();
            }
        }
    }
    public static Bitmap loadBitmapFromView(View v, int width, int height) {
        Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(b);
        v.draw(c);
        return b;
    }

этот код belo представляет метод showWindowManger. Отображает макет, но автоматически щелкает мышью вне макета подгузника

    public void showWindowManager() {
        if (requestPermission()) {
            return;
        }

        WindowManager.LayoutParams p =
                new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,
                        WindowManager.LayoutParams.WRAP_CONTENT,
                        Build.VERSION.SDK_INT > Build.VERSION_CODES.O
                                ? WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
                                : WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
                        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                        PixelFormat.TRANSLUCENT);


        final WindowManager windowManager = (WindowManager) getContext().getSystemService(WINDOW_SERVICE);
        LayoutInflater layoutInflater =
                (LayoutInflater) getActivity().getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
        final View popupView = layoutInflater.inflate(R.layout.pdf_layout, null);
        windowManager.addView(popupView, p);

        // dismiss windowManager after 3s
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                windowManager.removeView(popupView);
            }
        }, 3000);
    }
...