为什么对话框不显示PDFView?

问题描述

我想在自定义对话框中显示PDF。我从服务获取PDF作为ByteArray。我将ByteArray传递给PDFView对象,然后为对话框充气。除pdfview外,对话框中的所有视图都是可见的。

这是我的活动代码

val fileName = "filename.pdf"

val dialog = Dialog(this)
dialog.requestwindowFeature(Window.FEATURE_NO_TITLE)
dialog.setCancelable(true)
dialog.setContentView(R.layout.activity_pdf_view)
val pdfView = dialog.findViewById(R.id.pdfView) as PDFView
val closeBtn = dialog.findViewById(R.id.closeBtn) as ImageButton
val downloadBtn = dialog.findViewById(R.id.downloadBtn) as Button

pdfView.fromBytes(byteArray).load()

dialog.show()

下面是xml activity_pdf_view.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/transparent">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/ticketLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:background="@drawable/bg_ticket_layout">

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:text="Ticket"
            android:textSize="15sp"
            android:textColor="@color/black"
            android:layout_margin="25dp"/>

        <com.github.barteksc.pdfviewer.PDFView
            android:id="@+id/pdfView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintTop_toBottomOf="@id/title"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:layout_marginTop="39dp"
            android:layout_marginBottom="8dp"
            android:layout_marginHorizontal="8dp"/>

        <ImageButton
            android:id="@+id/closeBtn"
            android:layout_width="11dp"
            android:layout_height="11dp"
            android:background="@color/white"
            android:contentDescription="@string/close"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:srcCompat="@drawable/ic_cancel_icon"
            android:layout_marginTop="20dp"
            android:layout_marginEnd="24dp"/>

    </androidx.constraintlayout.widget.ConstraintLayout>

    <Button
        android:id="@+id/downloadBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/submit_btn_bg"
        android:drawableStart="@drawable/ic_file_download_white"
        android:text="@string/download_pdf"
        android:textColor="@color/white"
        android:textSize="15sp"
        app:layout_constraintEnd_toEndOf="@id/ticketLayout"
        app:layout_constraintStart_toStartOf="@id/ticketLayout"
        app:layout_constraintTop_toBottomOf="@id/ticketLayout"
        android:paddingHorizontal="19dp"
        android:drawablePadding="10dp"
        android:layout_marginTop="15dp"/>

</androidx.constraintlayout.widget.ConstraintLayout>

这是视图的外观:

enter image description here

我调试了代码,并确认byteArray不为空。所有其他视图(如关闭按钮和下载按钮)均可以正常运行。只有pdfview不会显示任何内容

我首先尝试了很多事情,例如AlertDialog.Builder,这是一个具有Dialog主题的活动,还有许多其他方法,最后将代码分解为最简单的方法。视图仍然没有变化。

请帮助我在此处查找问题。在此先感谢:)

更新

问题是,如果我将wrap_content用于父ConstraintLayout,它将显示此小视图,如屏幕截图所示。但是,当我使用match_parent时,它可以正确显示PDFView(但是整个屏幕看起来都很丑陋)。所以我要做的是硬编码父约束布局的高度。我在互联网上进行了一些挖掘,发现当父ConstraintLayout绘制其子布局时,未加载PDFView中的PDF。那么,有人知道在加载所有数据后可以重绘布局的任何方式吗?

解决方法

众所周知,Android已弃用通过Webview显示PDF,您可以在这里找到有用的链接。 https://github.com/eduxcellence/PDFViewer/find/master