轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/78113868
本文出自【趙彥軍的博客】html
若是不瞭解插件開發基礎的同窗能夠先看,git
Android Studio 插件開發詳解一:入門練手
Android Studio 插件開發詳解二:工具類github
在上面的兩篇文章,講解了插件開發的基礎,今天就來一個優勢難度的項目,插件的名字叫 AndroidPluginTranslate , 顧名思義就是能夠翻譯文案的插件,廢話很少說,先看最終效果圖:json
一、環境變量配置及軟件安裝,這裏省略,我在 Android Studio 插件開發詳解一:入門練手 說的很清楚。api
二、新建項目 AndroidPluginTranslate ,以下圖所示:微信
編碼實際上核心的一個類叫作AnAction,能夠直接選擇NEW->Action,以下圖:ide
而後填寫一些相關信息工具
須要填寫的屬性以下:學習
而後往下,選擇這個Action即將存在的位置:ui
咱們選擇的是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>
是描述這個插件的功能,儘量的寫的詳細,不然在上架插件市場的的時候,會審覈不過,白白浪費時間。
那麼這麼看,咱們在這個方法中只要完成三件事:
在 Android Studio 插件開發詳解二:工具類 中介紹了三個工具類,分別是 http 工具類 HttpManager、json 解析工具類 JsonUtil 、日誌打印工具類 Logger 。咱們須要建立一個 util 包,而後把這三個類拷貝到咱們的項目中。項目結構以下圖所示:
有了這三個工具類就大大減輕了咱們的開發任務。
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,從字面上仍是蠻好理解的。
調用的 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展示便可。
涉及到的代碼:
/** * 顯示一個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進行收集與整理。
Build --> Prepare Plugin Module... 生成插件。插件輸出爲 xxx.jar 包 或者 xxx.zip 包。
安裝插件,這裏就不講了,在 Android Studio 插件開發詳解一:入門練手 已經講的很清楚了。
把插件安裝在 Android Studio 後,重啓 Android Studio ,就能夠愉快的使用插件了
插件上傳到市場在這裏就不講了,詳見 Android Studio 插件開發詳解一:入門練手
終於到了總結的環節,這麼長的文章其實編寫插件總結起來就幾句話。
恩,就是這麼簡單,實踐起來會比較麻煩一點,等成功之後,回過頭來總結,發現步驟其實就那麼幾個步驟~~對於實際的Action相關的API,等你在編寫相關插件的時候,參考別的相似插件,查看官方文檔均可以。
最後全部的代碼都將上傳至:https://github.com/zyj1609wz/AndroidPluginTranslate
學會編寫Android Studio插件 別停留在用的程度了
我的微信號:zhaoyanjun125 , 歡迎關注