Android Studio 插件開發詳解三:翻譯插件實戰

来源:http://www.cnblogs.com/zhaoyanjun/archive/2017/11/13/7826854.html
-Advertisement-
Play Games

轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/78113868 本文出自 "【趙彥軍的博客】" 一:概述 如果不瞭解插件開發基礎的同學可以先看, "Android Studio 插件開發詳解一:入門練手" "Android Stud ...


轉載請標明出處: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="[email protected]" 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 , 歡迎關註


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原文地址: "canvas圖表(1) 柱狀圖" 前幾天用到了圖表庫,其中百度的ECharts,感覺做得最好,看它預設用的是canvas,canvas圖表在處理大數據方面比svg要好。那我也用canvas來實現一個圖表庫吧,感覺不會太難,先實現個簡單的柱狀圖。 效果請看: "柱狀圖https://ed ...
  • Web開發如今是如日中天,熱的發燙。那我們應該怎麼學習呢?這不光是初學者,很多學了幾年的人也會有些迷茫或者彷徨,大家也都知道不斷學習是不可避免的,不學習肯定要掉隊;那怎麼學效率更高,那些是坑,那些是路,每個人可能都有自己的簡介。作為一個程式猿,從兩個方面說說我的想法: 學習方面 1.基礎部分,主要就 ...
  • 本人整理的筆記,來自有道雲筆記: http://note.youdao.com/noteshare?id=12186e338fe5b73cba3cc5876ff167e8&sub=9049D3EE84474F4592905E5B91B13118 ...
  • 對於移動端這塊,筆者之前一直都是進行iOS開發的,也從來沒用過Java。但是因為進入了Google Android全國大學生移動互聯網創新挑戰賽(進入官網)的總決賽(筆者“西部電腦教育提升計劃”的項目被直接推薦進入決賽),這個比賽要求一定要提交apk程式,所以我不得不趕緊學習一下Android開發 ...
  • 筆者今年做了一個和人臉有關的android產品,主要是獲取攝像頭返回的預覽數據流,判斷該數據流是否包含了人臉,有人臉時顯示攝像頭預覽框,無人臉時攝像頭預覽框隱藏,看上去這個功能並不複雜,其實在開發過程中,遇到的問題也不多,全部都處理了,在正式推出前,這個產品在公司內部也測試了幾個月,也沒發現bug, ...
  • 調用系統圖庫: Intent intent = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, REQUEST_CODE_IMAGE... ...
  • Hello Android 代碼 備註 //創建對象 //設置對話框標題 //設置圖標 //設置內容 //設置點擊返回鍵對話框不消失 //顯示對話框 控制項id.setOnClickListener{ ​ ///事件內容 } 對話框對象AlertDialog 對話框引用android.support. ...
  • Ps:7-10月 完成公司兩個app項目上架。漏掉的總結 開始慢慢補上。 一、寫一個Activity的管理類 1、單例模式,以棧(先進後出)的形式存儲Activity對象 2、給AppManager管理類添加幾個常用方法。 (1)、添加Activity對象 (2)、結束當前Activity對象,即棧 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...