Some test text!

Show a document in a Fragment

In this document
chevron_rightToolbar menu
chevron_rightCustomize toolbar menu
chevron_rightCustomize navigation icon
chevron_rightInteract with fragment
This tutorial only applies to Xamarin.Android.
PdfViewCtrlTabHostFragment requires the full version of PDFTron library. See PDFTron full or standard?

All actions related to the PDF viewer are handled through the PdfViewCtrlTabHostFragment fragment. This fragment extends android.support.v4.app.Fragment and is responsible for showing document in tabs.

Please note that PdfViewCtrlTabHostFragment requires the com.pdftron:tools package.

First, make sure the following is in your <application> tag in AndroidManifest.xml.

<application
    ...
    android:largeHeap="true">
    ...    
</application>
If your app is targeting Android SDK version 28 or higher, please also set the android:usesCleartextTraffic="true" attribute in your application tag.

Then declare your Activity to extend AppCompatActivity and use AppCompat theme:

[Activity(Label = "MyReaderActivity",
    ConfigurationChanges = Android.Content.PM.ConfigChanges.ScreenSize | Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.KeyboardHidden,
    Theme = "@style/CustomAppTheme", 
    WindowSoftInputMode = SoftInput.AdjustPan)]
public class MyReaderActivity : Android.Support.V7.App.AppCompatActivity
{
  ...
}

If you would like to customize the appearance of the viewer activity, define CustomAppTheme in styles.xml:

<style name="CustomAppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
    <item name="colorPrimary">@color/app_color_primary_day</item>
    <item name="colorPrimaryDark">@color/app_color_primary_dark_day</item>
    <item name="colorAccent">@color/app_color_accent</item>
    <!-- Action bar -->
    <item name="actionModeBackground">?attr/colorPrimary</item>
    <item name="windowActionModeOverlay">true</item>
</style>
PdfViewCtrlTabHostFragment uses the AppCompat theme for material colors. Make sure that the value of android:theme in your activity tag also extends the AppCompat theme.

Displaying the PdfViewCtrlTabHostFragment in an activity is straightforward. Like any other fragment you should make an instance of the class and attach it to the activity. To create an instance of the host fragment you need to pass in a bundle that can be created using createBasicPdfViewCtrlTabBundle. The bundle specifies the document that should be shown when the host fragment is visible. For example, to open a document in the host fragment when you know the URI of the file (and its password if the file is password protected) you can call:

You can simply convert a file to a URI by:

Note that since we use the support version of android fragment, your activity must extend FragmentActivity and call getSupportFragmentManager() to get the FragmentManager.

If you would like to customize the UI of PdfViewCtrlTabHostFragment, you can use ViewerConfig.Builder builder. For example:

For details on customizing the UI interface and sample usage of ViewerConfig builder, check out the configuration tutorial.

linkToolbar menu

The default toolbar menu consists of menu items for

  • searching text in the current document
  • sharing the current document
  • setting up viewing mode
  • showing/hiding annotation toolbar
  • overflow menu

However, you can fully customize and control the toolbar menu as well as the navigation icon.

linkCustomize toolbar menu

In order to change the default toolbar menu items you need to create your own menu in menu resource folder and pass it to the host fragment through bundle:

linkCustomize navigation icon

To change the navigation icon, similar to the toolbar menu, you need to pass the desired icon to the host fragment through the bundle:

linkInteract with fragment

If you want to interact with the host fragment you can override the methods that you are interested in through events. For example, you may want to override ToolbarOptionsItemSelected when you add a new menu item, so when the item is clicked you can get a callback. As another example, you can get the callback when the navigation icon is clicked if you override NavButtonPressed.

Here's an example that replaces the default navigation icon, and only keeps the annotation toolbar icon in the toolbar menu while adding a new menu item to show a toast when selected:

The fragment_viewer_simple.xml should be placed in menu resource folder and contain:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_annotation_toolbar"
        android:icon="@drawable/ic_mode_edit_white"
        android:title="@string/action_annotation_toolbar"
        app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/action_show_toast"
        android:title="Show toast"
        app:showAsAction="never" />
</menu>

With this complete, you will see: