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);
}