Cách kết xuất tệp PDF trong Android


213

Android không có hỗ trợ PDF trong các thư viện của nó. Có cách nào để kết xuất tệp PDF trong ứng dụng Android không?


5
Đây là ví dụ tốt để hiển thị tập tin pdf. Cần tham khảo tệp Readme.txt trong liên kết dưới đây để sử dụng này. github.com/jblough/Android-Pdf-Viewer-L Library
Ramesh Akula

1
đây là một ví dụ về việc sử dụng thư viện đó: stackoverflow.com/a/16294833/2027232
Nicolas Tyler

Câu trả lời:


68

Vì API cấp 21 (Lollipop) nên Android cung cấp lớp PdfRenderer :

// create a new renderer
 PdfRenderer renderer = new PdfRenderer(getSeekableFileDescriptor());

 // let us just render all pages
 final int pageCount = renderer.getPageCount();
 for (int i = 0; i < pageCount; i++) {
     Page page = renderer.openPage(i);

     // say we render for showing on the screen
     page.render(mBitmap, null, null, Page.RENDER_MODE_FOR_DISPLAY);

     // do stuff with the bitmap

     // close the page
     page.close();
 }

 // close the renderer
 renderer.close();

Để biết thêm thông tin xem ứng dụng mẫu .

Đối với các API cũ hơn, tôi khuyên dùng thư viện PdfViewer của Android , nó rất nhanh và dễ sử dụng, được cấp phép theo Giấy phép Apache 2.0:

pdfView.fromAsset(String)
  .pages(0, 2, 1, 3, 3, 3) // all pages are displayed by default
  .enableSwipe(true)
  .swipeHorizontal(false)
  .enableDoubletap(true)
  .defaultPage(0)
  .onDraw(onDrawListener)
  .onLoad(onLoadCompleteListener)
  .onPageChange(onPageChangeListener)
  .onPageScroll(onPageScrollListener)
  .onError(onErrorListener)
  .enableAnnotationRendering(false)
  .password(null)
  .scrollHandle(null)
  .load();

12
Thư viện PDFView rất tuyệt, nhưng lưu ý rằng nó nằm dưới GNU General Public, không phải GPL nhỏ hơn. Điều này có thể gây khó khăn khi đưa vào phần mềm thương mại.
Sam

Vâng, @Sam đúng. Cá nhân tôi đã phải sử dụng PDF.js vì các vấn đề về giấy phép trong các phiên bản Android cũ hơn, nhưng kết xuất cực kỳ chậm và rất khó để làm cho nó hoạt động do giao tiếp Java-JavaScript.
Miloš ernilovský

1
Đối với các phiên bản cũ hơn, có cách nào để hiển thị chúng mà không cần tải xuống và lưu trữ tệp ở đâu đó trong ứng dụng không?
Gokhan Arik

1
Bạn có thể làm một ví dụ chi tiết hơn bằng cách sử dụng PDFView Library? Những gì chúng ta nên đưa vào pdfName? Điều gì làm các chức năng onDraw, onLoadonPageChangengười nghe cái nhìn như thế nào? Cảm ơn sự giúp đỡ của bạn :)
Triết Đoàn

2
Đã thêm một thư viện PDF mới được cấp phép theo Giấy phép Apache 2.0 vào câu trả lời.
Miloš ernilovský

61

Lấy từ blog của tôi:

public class MyPdfViewActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    WebView mWebView=new WebView(MyPdfViewActivity.this);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setPluginsEnabled(true);
    mWebView.loadUrl("https://docs.google.com/gview?embedded=true&url="+LinkTo);
    setContentView(mWebView);
  }
}

69
Điều này thực sự không sạch sẽ lắm. Đối với một người, nếu Google từng quyết định thay đổi URL Google Docs của họ, ứng dụng của bạn sẽ bị hỏng và bạn sẽ phải đẩy một bản cập nhật để người dùng có thể xem lại tài liệu.
Đánh dấu

3
điều này chỉ cho phép tôi xem trang đầu tiên và liên kết "Tải xuống" ở phía dưới không hoạt động ... có ý tưởng nào không? Ngoài ra, có vẻ như setPluginsEnables không phải là một phần của lớp WebView nữa.
whyoz

7
Điều này sẽ không hoạt động nếu không có kết nối Internet và Nó yêu cầu Giấy phép INTERNET
Mani

4
Nó được sử dụng để làm việc. Nhưng gần đây, nó tiếp tục hiển thị "Rất tiếc! Có một vấn đề khi xem trước tài liệu này" Tôi đoán rằng google đã thay đổi một số thứ ở bên cạnh họ gây ra vấn đề này.
Lee Yi Hong

1
Đối với tôi nó thực sự tải chậm và cuộn qua tài liệu.
nilsi

33

Tôi đã thực hiện một cách tiếp cận hỗn hợp từ một số câu trả lời cho bài viết này và các bài viết tương tự khác:

Giải pháp này kiểm tra xem ứng dụng trình đọc PDF đã được cài đặt chưa và thực hiện các bước sau: - Nếu trình đọc được cài đặt, hãy tải tệp PDF về thiết bị và khởi động ứng dụng trình đọc PDF - Nếu không có trình đọc nào được cài đặt, hãy hỏi người dùng nếu anh ta muốn xem tệp PDF trực tuyến thông qua Google Drive

GHI CHÚ! Giải pháp này sử dụng DownloadManagerlớp Android , được giới thiệu trong API9 (Android 2.3 hoặc Gingerbread). Điều này có nghĩa là nó không hoạt động trên Android 2.2 trở về trước.

Tôi đã viết một bài đăng blog về nó ở đây , nhưng tôi đã cung cấp đầy đủ mã bên dưới:

public class PDFTools {
    private static final String GOOGLE_DRIVE_PDF_READER_PREFIX = "http://drive.google.com/viewer?url=";
    private static final String PDF_MIME_TYPE = "application/pdf";
    private static final String HTML_MIME_TYPE = "text/html";

    /**
     * If a PDF reader is installed, download the PDF file and open it in a reader. 
     * Otherwise ask the user if he/she wants to view it in the Google Drive online PDF reader.<br />
     * <br />
     * <b>BEWARE:</b> This method
     * @param context
     * @param pdfUrl
     * @return
     */
    public static void showPDFUrl( final Context context, final String pdfUrl ) {
        if ( isPDFSupported( context ) ) {
            downloadAndOpenPDF(context, pdfUrl);
        } else {
            askToOpenPDFThroughGoogleDrive( context, pdfUrl );
        }
    }

    /**
     * Downloads a PDF with the Android DownloadManager and opens it with an installed PDF reader app.
     * @param context
     * @param pdfUrl
     */
    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    public static void downloadAndOpenPDF(final Context context, final String pdfUrl) {
        // Get filename
        final String filename = pdfUrl.substring( pdfUrl.lastIndexOf( "/" ) + 1 );
        // The place where the downloaded PDF file will be put
        final File tempFile = new File( context.getExternalFilesDir( Environment.DIRECTORY_DOWNLOADS ), filename );
        if ( tempFile.exists() ) {
            // If we have downloaded the file before, just go ahead and show it.
            openPDF( context, Uri.fromFile( tempFile ) );
            return;
        }

        // Show progress dialog while downloading
        final ProgressDialog progress = ProgressDialog.show( context, context.getString( R.string.pdf_show_local_progress_title ), context.getString( R.string.pdf_show_local_progress_content ), true );

        // Create the download request
        DownloadManager.Request r = new DownloadManager.Request( Uri.parse( pdfUrl ) );
        r.setDestinationInExternalFilesDir( context, Environment.DIRECTORY_DOWNLOADS, filename );
        final DownloadManager dm = (DownloadManager) context.getSystemService( Context.DOWNLOAD_SERVICE );
        BroadcastReceiver onComplete = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if ( !progress.isShowing() ) {
                    return;
                }
                context.unregisterReceiver( this );

                progress.dismiss();
                long downloadId = intent.getLongExtra( DownloadManager.EXTRA_DOWNLOAD_ID, -1 );
                Cursor c = dm.query( new DownloadManager.Query().setFilterById( downloadId ) );

                if ( c.moveToFirst() ) {
                    int status = c.getInt( c.getColumnIndex( DownloadManager.COLUMN_STATUS ) );
                    if ( status == DownloadManager.STATUS_SUCCESSFUL ) {
                        openPDF( context, Uri.fromFile( tempFile ) );
                    }
                }
                c.close();
            }
        };
        context.registerReceiver( onComplete, new IntentFilter( DownloadManager.ACTION_DOWNLOAD_COMPLETE ) );

        // Enqueue the request
        dm.enqueue( r );
    }

    /**
     * Show a dialog asking the user if he wants to open the PDF through Google Drive
     * @param context
     * @param pdfUrl
     */
    public static void askToOpenPDFThroughGoogleDrive( final Context context, final String pdfUrl ) {
        new AlertDialog.Builder( context )
            .setTitle( R.string.pdf_show_online_dialog_title )
            .setMessage( R.string.pdf_show_online_dialog_question )
            .setNegativeButton( R.string.pdf_show_online_dialog_button_no, null )
            .setPositiveButton( R.string.pdf_show_online_dialog_button_yes, new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    openPDFThroughGoogleDrive(context, pdfUrl); 
                }
            })
            .show();
    }

    /**
     * Launches a browser to view the PDF through Google Drive
     * @param context
     * @param pdfUrl
     */
    public static void openPDFThroughGoogleDrive(final Context context, final String pdfUrl) {
        Intent i = new Intent( Intent.ACTION_VIEW );
        i.setDataAndType(Uri.parse(GOOGLE_DRIVE_PDF_READER_PREFIX + pdfUrl ), HTML_MIME_TYPE );
        context.startActivity( i );
    }
    /**
     * Open a local PDF file with an installed reader
     * @param context
     * @param localUri
     */
    public static final void openPDF(Context context, Uri localUri ) {
        Intent i = new Intent( Intent.ACTION_VIEW );
        i.setDataAndType( localUri, PDF_MIME_TYPE );
        context.startActivity( i );
    }
    /**
     * Checks if any apps are installed that supports reading of PDF files.
     * @param context
     * @return
     */
    public static boolean isPDFSupported( Context context ) {
        Intent i = new Intent( Intent.ACTION_VIEW );
        final File tempFile = new File( context.getExternalFilesDir( Environment.DIRECTORY_DOWNLOADS ), "test.pdf" );
        i.setDataAndType( Uri.fromFile( tempFile ), PDF_MIME_TYPE );
        return context.getPackageManager().queryIntentActivities( i, PackageManager.MATCH_DEFAULT_ONLY ).size() > 0;
    }

}

8

Tải xuống mã nguồn tại đây ( Hiển thị tệp PDF trong ứng dụng Android của tôi )

Thêm phụ thuộc này vào Lớp của bạn: biên dịch 'com.github.barteksc: android-pdf-viewer: 2.0.3'

Activity_main.xml

<RelativeLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    xmlns:android="http://schemas.android.com/apk/res/android" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:background="@color/colorPrimaryDark"
        android:text="View PDF"
        android:textColor="#ffffff"
        android:id="@+id/tv_header"
        android:textSize="18dp"
        android:gravity="center"></TextView>

    <com.github.barteksc.pdfviewer.PDFView
        android:id="@+id/pdfView"
        android:layout_below="@+id/tv_header"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>


    </RelativeLayout>

MainActivity.java

import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.provider.OpenableColumns;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;

import com.github.barteksc.pdfviewer.PDFView;
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener;
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener;
import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle;
import com.shockwave.pdfium.PdfDocument;

import java.util.List;

public class MainActivity extends Activity implements OnPageChangeListener,OnLoadCompleteListener{
    private static final String TAG = MainActivity.class.getSimpleName();
    public static final String SAMPLE_FILE = "android_tutorial.pdf";
    PDFView pdfView;
    Integer pageNumber = 0;
    String pdfFileName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        pdfView= (PDFView)findViewById(R.id.pdfView);
        displayFromAsset(SAMPLE_FILE);
    }

    private void displayFromAsset(String assetFileName) {
        pdfFileName = assetFileName;

        pdfView.fromAsset(SAMPLE_FILE)
                .defaultPage(pageNumber)
                .enableSwipe(true)

                .swipeHorizontal(false)
                .onPageChange(this)
                .enableAnnotationRendering(true)
                .onLoad(this)
                .scrollHandle(new DefaultScrollHandle(this))
                .load();
    }


    @Override
    public void onPageChanged(int page, int pageCount) {
        pageNumber = page;
        setTitle(String.format("%s %s / %s", pdfFileName, page + 1, pageCount));
    }


    @Override
    public void loadComplete(int nbPages) {
        PdfDocument.Meta meta = pdfView.getDocumentMeta();
        printBookmarksTree(pdfView.getTableOfContents(), "-");

    }

    public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
        for (PdfDocument.Bookmark b : tree) {

            Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx()));

            if (b.hasChildren()) {
                printBookmarksTree(b.getChildren(), sep + "-");
            }
        }
    }

}

gợi ý: assetFileNametập tin pdf nên tồn tại trong assetsthư mục
ahmednabil88

7

Cuối cùng tôi đã có thể sửa đổi mã của butelo để mở bất kỳ tệp PDF nào trong hệ thống tệp Android bằng cách sử dụng pdf.js. Mã có thể được tìm thấy trên GitHub của tôi

Những gì tôi đã làm là sửa đổi pdffile.jsđối số để đọc HTML filenhư thế này:

var url = getURLParameter('file');

function getURLParameter(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null}

Vì vậy, những gì bạn cần làm chỉ là nối thêm đường dẫn tệp sau index.htmlnhư thế này:

Uri path = Uri.parse(Environment.getExternalStorageDirectory().toString() + "/data/test.pdf");
webView.loadUrl("file:///android_asset/pdfviewer/index.html?file=" + path);

Cập nhật pathbiến để trỏ đến một tệp PDF hợp lệ trong hệ thống tệp Adroid.


xin chào Paul, tôi cũng đã sử dụng ví dụ này, nhưng nó đang hiển thị màn hình trống trên WebView trong API cấp 16, bạn có thể có bất kỳ vấn đề nào không ??
Riddhish.Chaudhari

Tập tin pdf được lưu trữ ở đâu? Bạn không thể tải pdf từ thư mục tài sản. Bạn có thể tải từ thẻ SD hoặc bộ nhớ trong được bảo vệ của ứng dụng. Ngoài ra kiểm tra logcat của bạn cho bất kỳ lỗi liên quan đến webview.
Chaianu Paul

Đường dẫn Uri = Uri.parse (Môi trường.getExternalStorageDirectory (). ToString () + "/example4.pdf"); webView.loadUrl ("tệp: ///android_asset/pdfviewer/index.html? file =" + đường dẫn);
Riddhish.Chaudhari

@Paul Tôi đang sử dụng mã ở trên, nó hoạt động tốt với API 19 nhưng bên dưới nó không hoạt động. Tại sao??
Riddhish.Chaudhari

Vui lòng xem phần này để tương thích với các phiên bản Android cũ hơn: github.com/pauldmps/Android-pdf.js/issues/1 github.com/pauldmps/Android-pdf.js/issues/2
Chaianu Paul

4

bạn có thể sử dụng một phương pháp đơn giản bằng cách nhập

implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'

và mã XML là

<com.github.barteksc.pdfviewer.PDFView
        android:id="@+id/pdfv"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </com.github.barteksc.pdfviewer.PDFView>

và chỉ cần khai báo và thêm một tập tin vào một thư mục tài sản và chỉ cần gán tên

   PDFView  pdfView=findViewById(R.id.pdfv);       
    pdfView.fromAsset("agl.pdf").load();

Làm thế nào để bạn khai báo PDFView trong Kotlin?
Nông dân Nicholas

@NicholasFarmer kiểm tra liên kết này stackoverflow.com/questions/56613766/
Khăn

5
Chỉ cần cẩn thận, điều này có thể thêm 16 ~ 18 MB trên đầu ứng dụng của bạn. Thư viện này sử dụng PdfiumAndroidchính nó đã là 18,4 MB
Pierre

gợi ý: agl.pdftập tin nên tồn tại vào assetsthư mục
ahmednabil88

1

Để thêm một chút ánh sáng cho điều này, tôi sẽ phải sử dụng giải pháp pdf.js từ Mozilla. Đây là liên kết đến một triển khai đã được viết tốt về điều này: https://bitbucket.org/butelo/pdfviewer/ .

Dưới đây là các chỉnh sửa mà tôi đã thêm trong Hoạt động Android của mình:

private String getInternalPDFURL(String interalPDFName){
    return "file:///android_asset/pdfviewer/index.html?pdf=" + interalPDFName + ".pdf";
}

Dưới đây là các chỉnh sửa tôi đã thực hiện pdffile.js:

var url = '../' + getPDFURL();

function getPDFURL(){
    var query = window.location.search.substring(1);
    var vars = query.split("=");
    var pdfPage = vars[1];
    return pdfPage;
}

1

Tôi đã sử dụng mã dưới đây để mở và in PDF bằng Wi-Fi. Tôi đang gửi toàn bộ mã của mình và tôi hy vọng nó hữu ích.

public class MainActivity extends Activity {

    int Result_code = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button mButton = (Button)findViewById(R.id.button1);

        mButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                 PrintManager printManager = (PrintManager)getSystemService(Context.PRINT_SERVICE);
                String jobName =  " Document";
                printManager.print(jobName, pda, null);
            }
        });
    }


    public void openDocument(String name) {

        Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
        File file = new File(name);
        String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
        String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        if (extension.equalsIgnoreCase("") || mimetype == null) {
            // if there is no extension or there is no definite mimetype, still try to open the file
            intent.setDataAndType(Uri.fromFile(file), "text/*");
        }
        else {
            intent.setDataAndType(Uri.fromFile(file), mimetype);
        }

        // custom message for the intent
        startActivityForResult((Intent.createChooser(intent, "Choose an Application:")), Result_code);
        //startActivityForResult(intent, Result_code);
        //Toast.makeText(getApplicationContext(),"There are no email clients installed.", Toast.LENGTH_SHORT).show();
    }


    @SuppressLint("NewApi")
    PrintDocumentAdapter pda = new PrintDocumentAdapter(){

        @Override
        public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback){
            InputStream input = null;
            OutputStream output = null;

            try {
                String filename = Environment.getExternalStorageDirectory()    + "/" + "Holiday.pdf";
                File file = new File(filename);
                input = new FileInputStream(file);
                output = new FileOutputStream(destination.getFileDescriptor());

                byte[] buf = new byte[1024];
                int bytesRead;

                while ((bytesRead = input.read(buf)) > 0) {
                     output.write(buf, 0, bytesRead);
                }

                callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});
            }
            catch (FileNotFoundException ee){
                //Catch exception
            }
            catch (Exception e) {
                //Catch exception
            }
            finally {
                try {
                    input.close();
                    output.close();
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        @Override
        public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras){

            if (cancellationSignal.isCanceled()) {
                callback.onLayoutCancelled();
                return;
            }

           // int pages = computePageCount(newAttributes);

            PrintDocumentInfo pdi = new PrintDocumentInfo.Builder("Name of file").setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();

            callback.onLayoutFinished(pdi, true);
        }
    };
}

0

Không có cách nào để xem trước tài liệu pdf trong webview Android. Nếu bạn muốn xem trước pdf64. Nó đòi hỏi thư viện của bên thứ ba.

xây dựng.

compile 'com.github.barteksc:android-pdf-viewer:2.7.0'

hộp thoại_pdf_viewer

<?xml version="1.0" encoding="utf-8"?>

<!--
  ~ Copyright (c) 2017.
  ~ Samet Öztoprak
  ~ All rights reserved.
  -->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/dialog_pdf_viewer_close"
        style="@style/ExitButtonImageViewStyle"
        android:src="@drawable/popup_exit" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:orientation="vertical">

        <com.github.barteksc.pdfviewer.PDFView
            android:id="@+id/pdfView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

    <View style="@style/HorizontalLine" />

    <com.pozitron.commons.customviews.ButtonFont
        android:id="@+id/dialog_pdf_viewer_button"
        style="@style/ButtonPrimary2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="15dp"
        android:text="@string/agreed" />

</LinearLayout>

TweetsogPDFViewer.java

public class DialogPdfViewer extends Dialog {
    PDFView pdfView;
    byte[] decodedString;

    public interface OnDialogPdfViewerListener {
        void onAgreeClick(DialogPdfViewer dialogFullEula);

        void onCloseClick(DialogPdfViewer dialogFullEula);
    }

    public DialogPdfViewer(Context context, String base64, final DialogPdfViewer.OnDialogPdfViewerListener onDialogPdfViewerListener) {
        super(context);

        setContentView(R.layout.dialog_pdf_viewer);
        findViewById(R.id.dialog_pdf_viewer_close).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onDialogPdfViewerListener.onCloseClick(DialogPdfViewer.this);
            }
        });

        findViewById(R.id.dialog_pdf_viewer_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onDialogPdfViewerListener.onAgreeClick(DialogPdfViewer.this);
            }
        });

        decodedString = Base64.decode(base64.toString(), Base64.DEFAULT);

        pdfView = ((PDFView) findViewById(R.id.pdfView));
        pdfView.fromBytes(decodedString).load();

        setOnKeyListener(new OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
                    onDialogPdfViewerListener.onCloseClick(DialogPdfViewer.this);
                }
                return true;
            }
        });

    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.