AndroidStudio插件 -- LayoutFormat,格式化你的xml并將硬編碼的字符串和尺寸值放進(jìn)values 文件夾下

前言

在使用android studio 的過(guò)程中,我們做開發(fā)總是習(xí)慣的根據(jù)UI設(shè)計(jì)將尺寸值和字符串直接寫進(jìn).xml文件中,這樣做是非常不符合android開發(fā)規(guī)范的,不管leader跟你說(shuō)了幾次,“不要在layout中硬編碼”,但是大家總是這樣子做,因?yàn)槲覀冏龀绦蜷_發(fā)的就是懶啊,所以就有了這個(gè)插件的用武之地了,哈哈。

使用

1 .大家可以去我的github的網(wǎng)址:LayoutFormat_androidstudioplugin 下載AndroidPlugin_Layoutformat.jar,然后在adnroid studio 中,操作:
雙擊shift > 搜索Plugins (搜索 include no-project items要勾選))>點(diǎn)擊Plugins > install plugin form disk... >選擇下載的jar包 >重啟android studio >在 layout 中右鍵 refactor > LayoutFormat,ok啦
想要學(xué)習(xí)源碼的可以將整個(gè)倉(cāng)庫(kù)fork過(guò)去。
2 .大家可以在 Plugins 下 選擇 Browse repositories...,然后搜索 LayoutFormat 即可,過(guò)幾天應(yīng)該就通過(guò)審核,就會(huì)在intellj plugin 倉(cāng)庫(kù)中搜到了。

展示

1 . 批量去格式化layout.xml


批量修改layout

2 .修改某一個(gè)layout.xml


單獨(dú)修改一個(gè)布局

使用中可能會(huì)遇到的問(wèn)題

在導(dǎo)入插件時(shí),windows下可能會(huì)出現(xiàn)插件加載失敗的情況。會(huì)報(bào)下面的錯(cuò)誤:

cannot create class "com.shang.layoutformat.LayoutFormat" [Plugin: com.shang.android.layoutformat]
com.intellij.diagnostic.PluginException: cannot create class "com.shang.layoutformat.LayoutFormat" [Plugin: com.shang.android.layoutformat]
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.convertStub(ActionManagerImpl.java:177)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.convert(ActionManagerImpl.java:515)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getActionImpl(ActionManagerImpl.java:495)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getAction(ActionManagerImpl.java:488)
    at com.intellij.openapi.actionSystem.DefaultActionGroup.unStub(DefaultActionGroup.java:354)
    at com.intellij.openapi.actionSystem.DefaultActionGroup.getChildren(DefaultActionGroup.java:312)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl$5.compute(ActionManagerImpl.java:1315)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl$5.compute(ActionManagerImpl.java:1308)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:967)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.preloadActionGroup(ActionManagerImpl.java:1308)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.preloadActionGroup(ActionManagerImpl.java:1323)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.preloadActionGroup(ActionManagerImpl.java:1323)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.preloadActionGroup(ActionManagerImpl.java:1323)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.preloadActionGroup(ActionManagerImpl.java:1302)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.doPreloadActions(ActionManagerImpl.java:1290)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.access$200(ActionManagerImpl.java:77)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl$4.run(ActionManagerImpl.java:1278)
    at com.intellij.openapi.application.impl.ApplicationImpl$8.run(ApplicationImpl.java:366)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
    at org.jetbrains.ide.PooledThreadExecutor$1$1.run(PooledThreadExecutor.java:55)
Caused by: com.intellij.diagnostic.PluginException: com/shang/layoutformat/LayoutFormat : Unsupported major.minor version 52.0 [Plugin: com.shang.android.layoutformat]
    at com.intellij.ide.plugins.cl.PluginClassLoader.loadClassInsideSelf(PluginClassLoader.java:130)
    at com.intellij.ide.plugins.cl.PluginClassLoader.tryLoadingClass(PluginClassLoader.java:77)
    at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:66)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:270)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.convertStub(ActionManagerImpl.java:153)
    ... 23 more
Caused by: java.lang.UnsupportedClassVersionError: com/shang/layoutformat/LayoutFormat : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:643)
    at com.intellij.util.lang.UrlClassLoader._defineClass(UrlClassLoader.java:260)
    at com.intellij.util.lang.UrlClassLoader.defineClass(UrlClassLoader.java:256)
    at com.intellij.util.lang.UrlClassLoader._findClass(UrlClassLoader.java:225)
    at com.intellij.ide.plugins.cl.PluginClassLoader.loadClassInsideSelf(PluginClassLoader.java:124)

這是因?yàn)槟愕腶ndroid studio 的運(yùn)行時(shí)的jre版本低于我的插件,查看android studio 的 java 版本是在:
菜單欄 > Help > About
你可以看到JRE:1.8.xx 這個(gè)東西,這個(gè)JRE是讀取你的環(huán)境變量里面配置的java_home ,所以改下吧,提倡大家用最新的1.8的。因?yàn)槲蚁螺dIntellj IDEA 開發(fā)時(shí),它就默認(rèn)我必須要關(guān)聯(lián)1.8的jdk,坑爹啊

最后

感謝LayoutFormatter的作者,然后我想對(duì)作者說(shuō),里面的xml格式化的過(guò)程最好是用dom 或 sax 的方式去解析出來(lái),而不是一行一行的去讀然后判斷,確實(shí)不是很科學(xué)啊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容