2012-08-16 150 views
20

有誰知道在Android上工作的語法高亮庫嗎?我看過jsyntaxpane,但似乎並不支持Android。Android語法高亮顯示?

+0

yiu想要突出什麼? – Ahmad 2012-08-16 13:01:16

+0

請詳細說明你的問題,你想要突出顯示哪個組件? – 2012-08-16 13:01:29

+1

http://code.google.com/p/android-codepad/ – 2012-08-16 13:07:35

回答

12

對於只讀語法高亮,你有兩個選擇:

  1. 找到一個Java庫,可以語法高亮和使用<font color="">(即無CSS)生成HTML。然後您可以使用Html.fromHtml()創建一個Spanned對象,您可以使用該對象TextView

  2. 查找可以語法高亮並生成任何類型的HTML的Java庫。然後您可以在WebView中顯示。這似乎是鏈接到的評論者所做的。

如果您正在尋找的語法高亮的編輯,即顯著更加困難。雖然EditText可以採用與TextView相同的Spanned,但您必須通過語法高亮顯示器來運行所有內容,以反映每次按鍵或在鍵入暫停後的更改。或者,您需要在編輯過程中更加嚴格地烘烤語法高亮規則,以便您可以以某種方式增量調整高亮顯示,而不必重新編寫EditText的全部內容。儘管如此,我還沒有看到Android的開源語法高亮編輯器 - 一些封閉源代碼作爲Play商店中的應用程序。

+0

謝謝,我需要編輯器。看起來我會開始瀏覽jsyntaxpane,看看我是否可以將它移植到android/edittext。 – ng93 2012-08-16 19:31:03

+2

@ ng93:你在實現語法熒光筆方面是否有成功? 如果是,你能解釋一個實施過程嗎? 在此先感謝。 – rule 2012-09-19 09:05:05

+0

你有沒有發現有任何Java庫在1.點描述過的 magic? – fracz 2013-11-03 17:07:46

19

好吧,我做了一個Android的開放源代碼的語法高亮編輯:

https://github.com/markusfisch/ShaderEditor

這是很簡單的,也許只適合小數據,但它可能是一個很好的起點。

+1

非常好的例子。它絕對顯示它的簡單。EditText來源:https://github.com/markusfisch/ShaderEditor/blob/master/src/de/markusfisch/android/shadereditor/ShaderEditor.java – JRomero 2013-09-26 16:49:18

+1

@JRomero鏈接不't似乎再也無法工作了 – 2016-09-25 19:12:48

+3

上面的鏈接被破壞了[這是一個新鏈接](https://github.com/markusfisch/ShaderEditor/blob/5af7129d05a1d122923ae78d110a55a09597589f/app/src/main/java/de/markusfisch/android/ shadereditor /widget/ShaderEditor.java) – 2016-11-04 01:10:13

32

基於Prettify,我設法爲Android創建了語法突出顯示器。實際上,當我找到Java Prettify時很容易。只需下載它(不幸的是,它不會爲maven發佈)並將其jar添加到您的應用程序的構建路徑。

語法熒光筆我創建基於它:

public class PrettifyHighlighter { 
    private static final Map<String, String> COLORS = buildColorsMap(); 

    private static final String FONT_PATTERN = "<font color=\"#%s\">%s</font>"; 

    private final Parser parser = new PrettifyParser(); 

    public String highlight(String fileExtension, String sourceCode) { 
     StringBuilder highlighted = new StringBuilder(); 
     List<ParseResult> results = parser.parse(fileExtension, sourceCode); 
     for(ParseResult result : results){ 
      String type = result.getStyleKeys().get(0); 
      String content = sourceCode.substring(result.getOffset(), result.getOffset() + result.getLength()); 
      highlighted.append(String.format(FONT_PATTERN, getColor(type), content)); 
     } 
     return highlighted.toString(); 
    } 

    private String getColor(String type){ 
     return COLORS.containsKey(type) ? COLORS.get(type) : COLORS.get("pln"); 
    } 

    private static Map<String, String> buildColorsMap() { 
     Map<String, String> map = new HashMap<>(); 
     map.put("typ", "87cefa"); 
     map.put("kwd", "00ff00"); 
     map.put("lit", "ffff00"); 
     map.put("com", "999999"); 
     map.put("str", "ff4500"); 
     map.put("pun", "eeeeee"); 
     map.put("pln", "ffffff"); 
     return map; 
    } 
} 

語法的顏色是硬編碼的,但也可通過應用程序即偏好來也被設置。爲了在TextView顯示的Java源代碼,只是做:

// code is a String with source code to highlight 
// myTextView is a TextView component 
PrettifyHighlighter highlighter = new PrettifyHighlighter(); 
String highlighted = highlighter.highlight("java", code); 
myTextView.setText(Html.fromHtml(highlighted)); 

Java的美化庫繞製成50KB大我的應用程序。

+0

@wojciech完美而準確................ – 2014-09-20 11:36:29

+0

@WojciechFrączDude,C代碼怎麼樣? 等待回覆 – 2014-10-04 08:29:20

+2

@Tarun,先取代「 java「與」c「或」cpp「的爭執 – fracz 2014-10-04 10:27:09

1

我已經創建了一個可以解決您的問題的文本高亮的API。

https://github.com/nakshay/TextHighlighter

該API允許你通過特定的單詞和顏色,將返回其與HTML標籤的格式,你可以發送到Html.fromHtml字符串()獲取高亮顯示的文本。將Gradle依賴關係添加到您的模塊的gradle文件中。

compile 'com.github.akshay-naik:texthighlighterapi:1.1.0' 
+0

總是歡迎與潛在解決方案的鏈接,但請爲未來的訪問者添加一些詳細信息,以防鏈接不再可用。 – 2016-08-15 08:44:43

+1

感謝您的建議Nikolay。增加更多細節。 – Akshay 2016-08-16 13:00:52

+0

我用它我找不到這個函數highlighter.setLanguage(); – 2017-11-15 21:39:12