Some test text!
Android / Guides / Thumbnail slider
ThumbnailSlider
is a LinearLayout
that contains an AppCompatSeekBar
to change pages, and two AppCompatImageButton
on the left and right side. When sliding the seekbar, it displays a small page preview on top of the thumbnail slider.
To set up your layout with the thumbnail slider, add a <ThumbnailSlider>
element to your XML layout. For example, your layout may look like this:
<com.pdftron.pdf.controls.ThumbnailSlider
android:id="@+id/thumbnailSlider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"/>
Then, attach a PDFViewCtrl
to the thumbnail slider. If PDFViewCtrl
is in the same layout, you can set it by adding the app:pdfviewctrlId
attribute:
<com.pdftron.pdf.controls.ThumbnailSlider
android:id="@+id/thumbnailSlider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:pdfviewctrlId="@id/pdfviewctrl"/>
If PDFViewCtrl
is not in the same layout, you can programmatically set it to a thumbnail slider by calling setPdfViewCtrl(PDFViewCtrl)
:
ThumbnailSlider thumbnailSlider = findViewById(R.id.thumbnailSlider);
thumbnailSlider.setPdfViewCtrl(mPdfViewCtrl);
You can change the image drawable of the left menu item and right menu item buttons by adding the app:leftMenuItemDrawable
and app:rightMenuItemDrawable
attributes in your xml layout.
Example
<com.pdftron.pdf.controls.ThumbnailSlider
android:id="@+id/thumbnailSlider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:leftMenuItemDrawable="@drawable/left_icon"
app:rightMenuItemDrawable="@drawable/right_icon"/>
Additionally, you can remove the left and right slider buttons by setting the drawables to null:
<com.pdftron.pdf.controls.ThumbnailSlider
android:id="@+id/thumbnailSlider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:leftMenuItemDrawable="@null"
app:rightMenuItemDrawable="@null"/>
You can also change the buttons programmatically by calling setMenuItem(@DrawableRes int, @MenuItemPosition int)
. The second parameter determines the position of the button which is either POSITION_LEFT
or POSITION_RIGHT
.
Example
thumbnailSlider.setMenuItem(R.drawable.left_icon, ThumbnailSlider.POSITION_LEFT);
You can add a menu item clicked event listener by calling setOnMenuItemClickedListener
to be notified when one of the left or right buttons is clicked.
thumbnailSlider.setOnMenuItemClickedListener(new ThumbnailSlider.OnMenuItemClickedListener(){
@Override
public void onMenuItemClicked(int menuItemPosition) {
if (menuItemPosition == ThumbnailSlider.POSITION_LEFT) {
// The left button was clicked.
} else {
// The right button was clicked.
}
}
});
You can set a thumbnail slider seekbar event listener by calling setThumbSliderListener
to be notified when thumbnail slider touch tracking has started/stopped:
thumbnailSlider.setThumbSliderListener(new ThumbnailSlider.OnThumbnailSliderTrackingListener() {
@Override
public void onThumbSliderStartTrackingTouch() {
// Called when tracking on the seekbar has started
}
@Override
public void onThumbSliderStopTrackingTouch(int pageNum) {
// Called when tracking on the seekbar has stopped
}
});
You can customize the color of the left and right menu buttons as well as the seekbar by setting a custom style to the thumbnail_slider
attribute in your apps's theme. The custom style must extend ThumbnailSliderStyle
. For example:
<style name="PDFTronAppTheme" parent="PDFTronAppThemeBase">
<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>
<!-- Set your custom style in your app theme -->
<item name="thumbnail_slider">@style/CustomThumbnailSliderStyle</item>
</style>
<style name="CustomThumbnailSliderStyle" parent="ThumbnailSliderStyle">
<!-- Change the background color of the slider-->
<item name="colorBackground">@android:color/red</item>
<!-- Change the color of the seekbar and seekbar icon in the slider-->
<item name="seekbarColor">@android:color/black</item>
<!-- Change the color of the menu button left of the slider -->
<item name="leftMenuItemColor">@android:color/black</item>
<!-- Change the color of the menu button right of the slider -->
<item name="rightMenuItemColor">@android:color/black</item>
<!-- Change the description of the menu button left of the slider -->
<item name="leftMenuItemContentDescription">"LeftDescription"</item>
<!-- Change the color of the menu button right of the slider -->
<item name="rightMenuItemContentDescription">"RightDescription"</item>
<!-- Change the icon of the menu button left of the slider -->
<item name="leftMenuItemDrawable">@drawable/ic_thumbnails_grid_black_24dp</item>
<!-- Change the icon of the menu button right of the slider -->
<item name="rightMenuItemDrawable">@drawable/ic_list_white_24dp</item>
</style>
If you want to further customize the seekbar's layout attributes and appearance, such as padding and height, you can override the default seekbar style R.style.ThumbnailSliderStyle.Seekbar
by declaring the following in res/values/styles.xml
:
Example
For API < 21:
<style name="ThumbnailSliderStyle.Seekbar" parent="Widget.AppCompat.SeekBar" >
<!-- add paddingTop and paddingBottom for api < 21 here for avoiding seekbar becomes too thick-->
<item name="android:paddingTop">16dp</item>
<item name="android:paddingBottom">16dp</item>
<item name="android:minHeight">2dp</item>
<item name="android:maxHeight">2dp</item>
<item name="android:layout_gravity">center</item>
</style>
For API >= 21:
<style name="ThumbnailSliderStyle.Seekbar" parent="Widget.AppCompat.SeekBar">
<item name="android:progressTint">?attr/colorPrimary</item>
<item name="android:progressBackgroundTint">?attr/colorPrimary</item>
<item name="android:colorControlActivated">?attr/colorPrimary</item>
<item name="android:colorControlHighlight">?attr/colorPrimary</item>
<item name="android:minHeight">2dp</item>
<item name="android:maxHeight">2dp</item>
<item name="android:layout_gravity">center</item>
</style>
The seekbar progress bar drawable can be customized by overriding the seek_track_material.xml
drawable file. Similarly, the seekbar thumbnail drawable can be changed by overriding the seek_thumb.xml
drawable file. For reference, the source code for these drawables can be found in the lib\src\PDFViewCtrlTools\res\drawable
folder of the SDK package.
Attribute | Description | Format |
---|---|---|
app:pdfviewctrlId | Specifies the PDFViewCtrl view id | Reference |
app:leftMenuItemContentDescription | Specifies the content description of left menu item. | String |
app:rightMenuItemContentDescription | Specifies the content description of right menu item. | String |
app:leftMenuItemDrawable | Specifies left menu item drawable resource. | Reference |
app:rightMenuItemDrawable | Specifies right menu item drawable resource. | Reference |
app:colorBackground | Specifies background color. Uses default system background color if not defined. | Color |
app:seekbarColor | Specifies seekbar progress bar and thumb color. Default value: ?attr/colorPrimary in day mode and @android:color/white in night mode. | Color |
app:leftMenuItemColor | Specifies left menu item color. Default value: ?attr/colorPrimary in day mode and @android:color/white in night mode. | Color |
app:rightMenuItemColor | Specifies right menu item color. Default value: ?attr/colorPrimary in day mode and @android:color/white in night mode. | Color |
app:shadowEnabled | Specifies whether the shadow will appear. Default value: true . | Boolean |
Trial setup questions? Ask experts on Discord
Need other help? Contact Support
Pricing or product questions? Contact Sales