Custom Annotation Editing Controls

You can build your own custom views and user interfaces for creating and editing annotations. This guide describes the existing PSPDFKit APIs for doing that.

Starting annotation creation

The default PdfActivity comes with an AnnotationCreationToolbar that hosts all the available annotation tools. When a user taps an icon from the toolbar the activity will enter the annotation creation mode of the tapped tool.

In your code, you can enter annotation creation modes too, by calling the PdfFragment#enterAnnotationCreationMode with the desired AnnotationTool as argument.

Copy
1
2
3
// Enters the signature annotation creation mode. After tapping the document the user will be asked to enter a signature.
val tool = AnnotationTool.SIGNATURE
PdfFragment.enterAnnotationCreationMode(tool)
Copy
1
2
3
// Enters the signature annotation creation mode. After tapping the document the user will be asked to enter a signature.
final AnnotationTool tool = AnnotationTool.SIGNATURE;
getPdfFragment().enterAnnotationCreationMode(tool);

ℹ️ Note: Browse the available AnnotationTool values to see which tools you can use. For example, to select the Ink Eraser you can use AnnotationTool.ERASER.

To leave the annotation creation mode (switching back to the normal viewing mode) you can call PdfFragment#exitCurrentlyActiveMode.

1
2
// Leaves a previously launched creation mode.
PdfFragment.exitCurrentlyActiveMode()
1
2
// Leaves a previously launched creation mode.
getPdfFragment().exitCurrentlyActiveMode();

💡 Tip: PdfFragment#exitCurrentlyActiveMode can also be used to leave other special modes, for example annotation editing or text selection.

Mode listeners

If you need more control of the annotation creation mode, you can register an OnAnnotationCreationModeChangeListener on the fragment. Once the creation mode was entered, the listener will be called, giving you access to the AnnotationCreationController. The controller objects gives you access to all properties of the currently created annotation (color, size, styles, etc.).

Copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class ExampleActivity : PdfActivity(), AnnotationManager.OnAnnotationCreationModeChangeListener {

    // ...

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        PdfFragment.addOnAnnotationCreationModeChangeListener(this)
    }

    override fun onEnterAnnotationCreationMode(controller: AnnotationCreationController) {
        controller.color = Color.RED
        controller.thickness = 10
    }

    /**
     * This method is called whenever the current annotation creation mode is replaced by another one.
     * For example, when subsequently calling enterAnnotationCreationMode(...).
     */
    override fun onChangeAnnotationCreationMode(controller: AnnotationCreationController) = Unit

    /**
     * This is called when the current annotation creation mode was left.
     * For example, when calling fragment.exitCurrentlyActiveMode() or by entering a different mode (i.e. editing).
     */
    override fun onExitAnnotationCreationMode(controller: AnnotationCreationController) = Unit
}
Copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class ExampleActivity extends PdfActivity implements AnnotationManager.OnAnnotationCreationModeChangeListener {

    // ...

    @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getPdfFragment().addOnAnnotationCreationModeChangeListener(this);
    }

    @Override public void onEnterAnnotationCreationMode(@NonNull AnnotationCreationController controller) {
        controller.setColor(Color.RED);
        controller.setThickness(10);
    }

    /**
     * This method is called whenever the current annotation creation mode is replaced by another one.
     * For example, when subsequently calling enterAnnotationCreationMode(...).
     */
    @Override public void onChangeAnnotationCreationMode(@NonNull AnnotationCreationController controller) {}

    /**
     * This is called when the current annotation creation mode was left.
     * For example, when calling fragment.exitCurrentlyActiveMode() or by entering a different mode (i.e. editing).
     */
    @Override public void onExitAnnotationCreationMode(@NonNull AnnotationCreationController controller) {}
}