1. 首页
  2. Foxit PDF SDK(安卓版)
  3. “complete_pdf_viewer” demo中如何把铅笔和橡皮擦按钮挪到bar界面上?

“complete_pdf_viewer” demo中如何把铅笔和橡皮擦按钮挪到bar界面上?

Foxit PDF SDK for Android版本的默认界面现在基本和移动端的阅读器靠拢,具有了更多的标注的编辑功能,但是不是所有的用户都要那么多的工具菜单。这样就得修改uiextensions_src来实现。

以如何把签名和橡皮擦挪到最顶端的菜单栏为例。需要有以下的几个步骤:

1.添加2个工具栏按钮:

“complete_pdf_viewer” demo的”PDFReaderFragment.java”文件中”mUiExtensionsManager = new
UIExtensionsManager(getActivity().getApplicationContext(), pdfViewerCtrl, config);”之后添加以下代码:

mUiExtensionsManager.getBarManager().addItem(IBarsHandler.BarName.BOTTOM_BAR, BaseBar.TB_Position.Position_CENTER,
 R.string.fx_string_pencil, R.drawable.mt_iv_pencil, 0, new IBarsHandler.IItemClickListener() {
 @Override
 public void onClick(View v) {
   InkModule inkModule = (InkModule) mUiExtensionsManager.getModuleByName(Module.MODULE_NAME_INK);
   if (inkModule != null) {
     mUiExtensionsManager.setCurrentToolHandler(inkModule.getToolHandler());
     mUiExtensionsManager.changeState(ReadStateConfig.STATE_ANNOTTOOL);
   }
 }
});
 
 mUiExtensionsManager.getBarManager().addItem(IBarsHandler.BarName.BOTTOM_BAR, BaseBar.TB_Position.Position_CENTER,
 R.string.fx_string_eraser, R.drawable.mt_eraser_normal, 0, new IBarsHandler.IItemClickListener() {
 @Override
 public void onClick(View v) {
   EraserModule eraserModule = (EraserModule) mUiExtensionsManager.getModuleByName(Module.MODULE_NAME_ERASER);
   if (eraserModule != null) {
     mUiExtensionsManager.setCurrentToolHandler(eraserModule.getToolHandler());
     mUiExtensionsManager.changeState(ReadStateConfig.STATE_ANNOTTOOL);
   }
 }
});

2. 修改工具栏的响应状态

uiextensions_src工程中修改”UIExtensionsManager.java”文件,以下函数中

private void changeToolBarState(ToolHandler oldToolHandler, ToolHandler newToolHandler) {
.....
if (newToolHandler instanceof SignatureToolHandler) {
   triggerDismissMenuEvent();
   mMainFrame.resetAnnotCustomBottomBar();
   mMainFrame.resetAnnotCustomTopBar();
   changeState(ReadStateConfig.STATE_SIGNATURE);
 } else if (newToolHandler != null) {
   changeState(ReadStateConfig.STATE_ANNOTTOOL);
 } else if (getState() == ReadStateConfig.STATE_ANNOTTOOL) {
   changeState(ReadStateConfig.STATE_NORMAL); // 原先是STATE_Edit
 }
 if (oldToolHandler instanceof SignatureToolHandler && newToolHandler == null) {
   changeState(ReadStateConfig.STATE_NORMAL);
 }
.....
}

3. 修改Toolhandler的响应

铅笔工具的handler文件InkToolHandler.java 中修改以下地方

private void resetAnnotBar(){
 mUiExtensionsManager.getMainFrame().getToolSetBar().removeAllItems();
 
 mOKItem = new BaseItemImpl(mContext);
 mOKItem.setTag(ToolbarItemConfig.ITEM_ANNOT_BAR_OK);
 mOKItem.setImageResource(R.drawable.rd_annot_create_ok_selector);
 mOKItem.setOnClickListener(new View.OnClickListener() {
 @Override
   public void onClick(View v) {
   mUiExtensionsManager.changeState(ReadStateConfig.STATE_NORMAL); // 原先是STATE_Edit
   mUiExtensionsManager.setCurrentToolHandler(null);
   }
 });
.....
}

橡皮擦工具的handler文件EraserToolHandler.java 中修改以下地方

private void resetAnnotBar(){
 mUiExtensionsManager.getMainFrame().getToolSetBar().removeAllItems();
 
 mOKItem = new BaseItemImpl(mContext);
 mOKItem.setTag(ToolbarItemConfig.ITEM_ANNOT_BAR_OK);
 mOKItem.setImageResource(R.drawable.rd_annot_create_ok_selector);
 mOKItem.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
     mUiExtensionsManager.changeState(ReadStateConfig.STATE_NORMAL); // 原先是STATE_Edit
     mUiExtensionsManager.setCurrentToolHandler(null);
   }
 });
....
}

修改完后的界面如下:

更新于 2020年8月11日

这篇文章有用吗?

相关文章