Example of how to alter contextual toolbar menu items structure. Displayed on AnnotationCreationToolbar.


/*
* Copyright © 2016-2026 PSPDFKit GmbH. All rights reserved.
*
* The PSPDFKit Sample applications are licensed with a modified BSD license.
* Please see License for details. This notice may not be removed from this file.
*/
package com.pspdfkit.catalog.examples.java;
import static com.pspdfkit.catalog.tasks.ExtractAssetTask.extract;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import com.pspdfkit.catalog.R;
import com.pspdfkit.catalog.SdkExample;
import com.pspdfkit.catalog.ui.CustomAnnotationCreationToolbarGroupingRule;
import com.pspdfkit.configuration.activity.PdfActivityConfiguration;
import com.pspdfkit.ui.PdfActivity;
import com.pspdfkit.ui.PdfActivityIntentBuilder;
import com.pspdfkit.ui.toolbar.AnnotationCreationToolbar;
import com.pspdfkit.ui.toolbar.AnnotationEditingToolbar;
import com.pspdfkit.ui.toolbar.ContextualToolbar;
import com.pspdfkit.ui.toolbar.ContextualToolbarMenuItem;
import com.pspdfkit.ui.toolbar.DocumentEditingToolbar;
import com.pspdfkit.ui.toolbar.ToolbarCoordinatorLayout;
import java.util.List;
/**
* Example of how to alter contextual toolbar menu items structure. Displayed on
* AnnotationCreationToolbar.
*/
public class CustomToolbarIconGroupingExample extends SdkExample {
public CustomToolbarIconGroupingExample(@NonNull Context context) {
super(
context,
R.string.customToolbarItemGroupingExampleTitle,
R.string.customToolbarItemGroupingExampleDescription);
}
@Override
public void launchExample(
@NonNull final Context context, @NonNull final PdfActivityConfiguration.Builder configuration) {
// We use a custom utility class to extract the example document from the assets.
extract(WELCOME_DOC, getTitle(), context, documentFile -> {
// To start the DarkThemeActivity create a launch intent using the builder.
final Intent intent = PdfActivityIntentBuilder.fromUri(context, Uri.fromFile(documentFile))
.configuration(configuration.build())
.activityClass(CustomToolbarIconGroupingActivity.class)
.build();
// Start the DarkThemeActivity for the extracted document.
context.startActivity(intent);
});
}
/**
* This examples shows how to add items to the toolbar and apply a custom grouping rule. See {@link
* CustomAnnotationCreationToolbarGroupingRule} for the applied grouping.
*/
public static class CustomToolbarIconGroupingActivity extends PdfActivity
implements ToolbarCoordinatorLayout.OnContextualToolbarLifecycleListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setOnContextualToolbarLifecycleListener(this);
}
@Override
public void onPrepareContextualToolbar(@NonNull ContextualToolbar toolbar) {
if (toolbar instanceof AnnotationCreationToolbar annotationCreationToolbar) {
annotationCreationToolbar.setDraggable(false);
annotationCreationToolbar.setUseBackButtonForCloseWhenHorizontal(true);
annotationCreationToolbar.setMenuItemGroupingRule(
new CustomAnnotationCreationToolbarGroupingRule(this));
// Get the existing menu items so we can add our item later.
final List<ContextualToolbarMenuItem> menuItems = annotationCreationToolbar.getMenuItems();
// Create our custom menu item.
final ContextualToolbarMenuItem customItem = ContextualToolbarMenuItem.createSingleItem(
this,
R.id.pspdf_menu_custom,
ContextCompat.getDrawable(this, R.drawable.ic_bookmark),
"Bookmark",
Color.WHITE,
Color.WHITE,
ContextualToolbarMenuItem.Position.START,
false);
// Tell the toolbar about our new item.
menuItems.add(customItem);
annotationCreationToolbar.setMenuItems(menuItems);
// Add a listener so we can handle clicking on our item.
annotationCreationToolbar.setOnMenuItemClickListener((toolbar1, menuItem) -> {
if (menuItem.getId() == R.id.pspdf_menu_custom) {
Toast.makeText(
CustomToolbarIconGroupingActivity.this,
"Custom Action clicked",
Toast.LENGTH_SHORT)
.show();
// You can even hide menu items. This shows how to toggle image menu
// item by clicking on the custom button.
ContextualToolbarMenuItem imageItem =
toolbar1.findItemById(com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_image);
if (imageItem != null) {
toolbar1.setMenuItemVisibility(
com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_image,
imageItem.getVisibility() == View.GONE ? View.VISIBLE : View.GONE);
}
return true;
}
return false;
});
// Demonstrating how you can disable the stylus button with this API.
annotationCreationToolbar.setShouldShowStylusButton(false);
} else if (toolbar instanceof AnnotationEditingToolbar) {
// This shows how to hide annotation note button for all annotations.
toolbar.setMenuItemVisibility(
com.pspdfkit.R.id.pspdf__annotation_creation_toolbar_item_note, View.GONE);
} else if (toolbar instanceof DocumentEditingToolbar) {
// This shows how to hide close button in document editor.
toolbar.getCloseButton().setVisibility(View.GONE);
}
}
@Override
public void onDisplayContextualToolbar(@NonNull ContextualToolbar toolbar) {}
@Override
public void onRemoveContextualToolbar(@NonNull ContextualToolbar toolbar) {}
}
}

This code sample is an example that illustrates how to use our SDK. Please adapt it to your specific use case.