zoukankan      html  css  js  c++  java
  • Android Studio 插件开发详解三:翻译插件实战

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78113868
    本文出自【赵彦军的博客】

    一:概述

    如果不了解插件开发基础的同学可以先看,

    Android Studio 插件开发详解一:入门练手
    Android Studio 插件开发详解二:工具类

    在上面的两篇文章,讲解了插件开发的基础,今天就来一个优点难度的项目,插件的名字叫 AndroidPluginTranslate , 顾名思义就是可以翻译文案的插件,废话不多说,先看最终效果图:

    这里写图片描述

    二、准备工作

    1、环境变量配置及软件安装,这里省略,我在 Android Studio 插件开发详解一:入门练手 说的很清楚。

    2、新建项目 AndroidPluginTranslate ,如下图所示:

    这里写图片描述

    三、编码

    (1)关键知识

    编码实际上核心的一个类叫做AnAction,可以直接选择NEW->Action,如下图:

    这里写图片描述

    然后填写一些相关信息

    这里写图片描述

    需要填写的属性如下:

    • ActionID:代表该Action的唯一的ID,一般的格式为:pluginName.ID
    • ClassName:类名
    • Name:就是最终插件在菜单上的名称
    • Description:对这个Action的描述信息

    然后往下,选择这个Action即将存在的位置:

    我们选择的是EditMenu,右侧选择为first,即EditMenu下的第一个,效果如图:

    这里写图片描述

    创建好 TranslateAction 后,它的代码很简单,如下:

    import com.intellij.openapi.actionSystem.AnAction;
    import com.intellij.openapi.actionSystem.AnActionEvent;
    
    public class TranslateAction extends AnAction {
    
        @Override
        public void actionPerformed(AnActionEvent e) {
            // TODO: insert action logic here
        }
    }
    

    当我们点击菜单的时候,就回触发actionPerformed()方法。

    此外我们刚才填写的信息,也在plugin.xml中完成了注册,大家可以进去看一眼,actions的标签如下:

    <idea-plugin>
    
      <id>com.your.company.unique.plugin.id</id>
      <name>Plugin display name here</name>
      <version>1.0</version>
      <vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompany</vendor>
    
      <description><![CDATA[
          Enter short description for your plugin here.<br>
          <em>most HTML tags may be used</em>
        ]]></description>
    
    
      <actions>
    
          <action id="TranslateActionID" class="action.TranslateAction" text="Translate"
                  description="TranslateAction TranslateAction">
            <add-to-group group-id="EditMenu" anchor="first"/>
            <keyboard-shortcut keymap="$default" first-keystroke="ctrl Q"/>
          </action>
    
      </actions>
    <idea-plugin>
    

    这里大家一定要注意,要对 <id><name><version><vendor><description> 这几个标签要认真填写,其中 <id> 是这个插件的 id ,一定不能和市场上的其他插件一样;<description> 是描述这个插件的功能,尽可能的写的详细,否则在上架插件市场的的时候,会审核不过,白白浪费时间。

    那么这么看,我们在这个方法中只要完成三件事:

    • 获得当前选中的单词
    • 调用相关API得到单词的意思
    • 通过一个类似于PopupWindow来显示

    (2)创建工具类

    Android Studio 插件开发详解二:工具类 中介绍了三个工具类,分别是 http 工具类 HttpManager、json 解析工具类 JsonUtil 、日志打印工具类 Logger 。我们需要创建一个 util 包,然后把这三个类拷贝到我们的项目中。项目结构如下图所示:

    这里写图片描述

    有了这三个工具类就大大减轻了我们的开发任务。

    (3) 获得当前选中的单词

    public void actionPerformed(AnActionEvent e) {
        // TODO: insert action logic here
        final Editor mEditor = e.getData(PlatformDataKeys.EDITOR);
        if (null == mEditor) {
            return;
        }
        SelectionModel model = mEditor.getSelectionModel();
        final String selectedText = model.getSelectedText();
        if (TextUtils.isEmpty(selectedText)) {
            return;
        }
    }
    

    是不是觉得API很陌生,恩,我也觉得很陌生,关于API这里介绍其实没什么意义,本文主要目的是让大家对自定义插件有个类helloworld的认识,至于插件里面的代码涉及到的API等到大家需要编写插件的时候,再详细学习就好了,现在就不要浪费精力记忆这些东西了。

    上面的代码就是获得选中的文本,通过一个Editor,然后拿到SelectionModel,再拿到selectedText,从字面上还是蛮好理解的。

    (4)调用相关API得到单词的意思

    调用的 API 我们选择有道云的翻译 API
    有道智云:http://ai.youdao.com/
    有道智云API文档:http://ai.youdao.com/docs/doc-trans-api.s#p02

    家如果想要做单词翻译,可以看下,非常简单, 不过这个API 现在是收费了,新注册的用户会有 100 元的体验金。

    接口的调用这里不细说,官方有很详细的说明,另外本例子会上传至 Github , 还不清楚可以去我的Github 查看。我们根据返回的 json 字符串生成了一个类 TranslateBean;然后通过 Gson 转化为TranslateBean对象。

    好了,有了返回的数据以后,直接通过一个类似popupWindow展现即可。

    (5)通过一个类似于PopupWindow来显示

    涉及到的代码:

      /**
         * 显示一个Popwindow
         *
         * @param editor
         * @param result
         */
        private void showPopupBalloon(final Editor editor, final String result) {
            ApplicationManager.getApplication().invokeLater(new Runnable() {
                public void run() {
                    LogUtil.thread();
                    JBPopupFactory factory = JBPopupFactory.getInstance();
                    factory.createHtmlTextBalloonBuilder(result, null, new JBColor(new Color(186, 238, 186), new Color(73, 117, 73)), null)
                            .setFadeoutTime(5000)
                            .createBalloon()
                            .show(factory.guessBestPopupLocation(editor), Balloon.Position.below);
                }
            });
        }
    

    这个API,恩,我copy的源码,依然是不求记住,知道这有个类似的功能即可。

    简单看一下,是通过创建一个JBPopupFactory,然后通过它创建一个HtmlTextBalloonBuilder,通过这个builder去设置各种参数,最后show。

    ok,对于一个入门的例子,不要太强求对插件中这些API的掌握,还是那句话,等需要写了再去查,需要什么功能,哪怕到对应的插件中去copy源码都可以,当然也有文档:

    有兴趣的可以整理各种类型的插件,比如弹出popupWindow,生成代码,生成文件类别的,然后对相关的API进行收集与整理。

    四、插件部署

    (1)、插件输出

    Build --> Prepare Plugin Module... 生成插件。插件输出为 xxx.jar 包 或者 xxx.zip 包。

    这里写图片描述

    安装插件,这里就不讲了,在 Android Studio 插件开发详解一:入门练手 已经讲的很清楚了。

    (2)插件演示

    把插件安装在 Android Studio 后,重启 Android Studio ,就可以愉快的使用插件了

    这里写图片描述

    (3)插件上传到市场

    插件上传到市场在这里就不讲了,详见 Android Studio 插件开发详解一:入门练手

    五、总结

    终于到了总结的环节,这么长的文章其实编写插件总结起来就几句话。

    • 下载Intellij IDEA,新建一个Intellij IDEA plugin的项目
    • 然后在里面new Action以及编写API
    • 点击prepare plugin生成jar,这个jar就可以用来安装了。

    恩,就是这么简单,实践起来会比较麻烦一点,等成功以后,回过头来总结,发现步骤其实就那么几个步骤~~对于实际的Action相关的API,等你在编写相关插件的时候,参考别的类似插件,查看官方文档都可以。

    最后所有的代码都将上传至:https://github.com/zyj1609wz/AndroidPluginTranslate

    参考资料

    学会编写Android Studio插件 别停留在用的程度了


    个人微信号:zhaoyanjun125 , 欢迎关注

  • 相关阅读:
    使用API创建AR 贷项通知单
    JAVA学习(二):JDK介绍及其结构、用途
    android tips—NumberPicker,DataPicker,TimePicker样式改动
    vijos 1234 口袋的天空
    ORA-38760: This database instance failed to turn on flashback database 第三篇
    创建在SQLServer 和 Oracle的 DBLINK
    12本最优秀的Android开发电子书强力推荐
    Js表单验证
    iText操作word文档总结
    Conversion to Dalvik format failed: Unable to execute dex
  • 原文地址:https://www.cnblogs.com/zhaoyanjun/p/7826854.html
Copyright © 2011-2022 走看看