Android Coding利器之掌握小技巧,助你Coding更上一層樓~
前言
話說(shuō)前幾天在網(wǎng)上瀏覽到一大牛寫(xiě)的關(guān)于Android布局優(yōu)化的文章,看后感觸很深,回過(guò)頭看看自己寫(xiě)過(guò)的代碼,發(fā)現(xiàn)還是有不少需要改進(jìn),今天找不到那天看的文章了,只能自己總結(jié)一些,以后有機(jī)會(huì)再次補(bǔ)充吧~ 。
本文目標(biāo)
通過(guò)舉例說(shuō)明Android開(kāi)發(fā)中的小技巧,讓你我更6的玩轉(zhuǎn)Android~
掌握小技巧,助你Coding更上一層樓~
本文將通過(guò)以下幾點(diǎn)進(jìn)行舉例說(shuō)明:
- Android Studio 常用快捷鍵;
- Android Studio 強(qiáng)大的代碼補(bǔ)全;
- Android Studio 插件;
- Android 布局優(yōu)化
Android Studio 常用快捷鍵
只從接觸Android Studio之后,愈發(fā)離不開(kāi)這個(gè)開(kāi)發(fā)神器了~也是,越接觸,越能感覺(jué)Studio的魅力,今天為大家?guī)?lái)LZ開(kāi)發(fā)中常用的一些快捷鍵。
1. Shift+F6 全局修改
LZ一般使用這種方式去改全局變量,或者資源名稱(chēng)。
2. Alt+F7 查看全局引用
LZ一般優(yōu)化時(shí)會(huì)使用這個(gè)去查看某個(gè)方法或者變量全局引用
3. Ctrl+Shift+上下鍵 移動(dòng)代碼
4. 強(qiáng)大的 Alt+Insert
Alt+Insert,這個(gè)快捷鍵異常強(qiáng)大,里面包含生成get,set,toString ... 等一系列,愛(ài)不釋手~
5. Ctrl+F 局部查找
用這個(gè)找個(gè)方法啥的很6,但是僅限于局部,也就是本類(lèi)
6. Ctrl+Alt+V 自動(dòng)初始化變量 引入變量類(lèi)型
只適用于基本類(lèi)型
7. Ctrl+D 向下復(fù)制
還在Ctrl+C,Ctrl+V嘛?Out了,騷年~
8. Ctrl+Alt+L 格式化代碼
這個(gè)不得不說(shuō),都成為一種習(xí)慣,寫(xiě)好一部分總是習(xí)慣格式化下代碼
9. Ctrl+Alt+O 去除無(wú)效引用(包名)
去除無(wú)用引用包以及格式化代碼都成為L(zhǎng)Z標(biāo)配了~GGG
10. Ctrl+J 強(qiáng)大的代碼補(bǔ)全
不得不說(shuō),這個(gè)真的666啊~
11. Ctrl+Alt+T 快速生成類(lèi)似try塊 if塊 while等
這個(gè)LZ一般還是用于生成try塊方便,在項(xiàng)目中針對(duì)某些會(huì)出現(xiàn)異常的代碼塊都需要添加try
塊,防止異常導(dǎo)致崩潰
12. 貫穿全局的Alt+Enter
此子可用于導(dǎo)包,或者修正某些異常,類(lèi)似于某些方法需要拋出異?;蛘咛砑觮ry塊等
13. Ctrl+N 查找類(lèi)
不想用鼠標(biāo),還想找個(gè)類(lèi)腫么辦?Ctrl+N來(lái)幫你~
14. Ctrl+E 查看瀏覽歷史
15 .Alt+Shift+C 對(duì)比本地歷史紀(jì)錄
這個(gè)技能不錯(cuò),666
16. Ctrl+Shift+Space 自動(dòng)補(bǔ)全代碼
17. Ctrl+Y 刪除當(dāng)前行
18. F2 或Shift+F2 高亮錯(cuò)誤或警告快速定位
19. Alt+J 多行編輯
想要一次性寫(xiě)多行么?想一次性修改多行么?完全不是夢(mèng)~
關(guān)于常用快捷鍵介紹到此,以后用到再補(bǔ)充~
Android Studio 強(qiáng)大的代碼補(bǔ)全
在上面已經(jīng)為大家列舉LZ個(gè)人開(kāi)發(fā)中常用的一些快捷鍵,下面簡(jiǎn)單說(shuō)明下強(qiáng)大的代碼補(bǔ)全功能~繼續(xù)感受Android Studio的魅力~
騷年,還在手動(dòng)寫(xiě)public static final嗎?
作為項(xiàng)目中常用也幾乎為必備的東西,強(qiáng)大的Studio早已看穿一切~當(dāng)然LZ這里沒(méi)有全面,大家可以自行挖掘~或者直接使用快捷鍵~
Android Studio 插件
強(qiáng)大的Android Studio背后肯定會(huì)有n多插件使其更加優(yōu)秀,下面將列舉LZ常用的幾種,具體大家可自行發(fā)掘~
1. GsonFormat json快速生成實(shí)體類(lèi)
還在為Json編寫(xiě)實(shí)體類(lèi)犯愁嗎?趕快來(lái)使用它~
2. ButterKnife Zelezny 一鍵生成注解 簡(jiǎn)化代碼
使用這個(gè)需要添加相應(yīng)的依賴(lài),為了省事兒,LZ直接盜圖了~勿怪
3. Parcelable 序列化
Android中的序列化有兩種方式,分別是實(shí)現(xiàn)Serializable接口和Parcelable接口,但在Android中是推薦使用Parcelable,而且這邊過(guò)程比較繁瑣,幸好有這神器~
4. Genymotion 優(yōu)秀的模擬器
不解釋?zhuān)膊唤貓D了,不過(guò)現(xiàn)在谷歌推出的模擬器使用起來(lái)也還不錯(cuò),個(gè)人比較支持谷歌更新后的模擬器
LZ目前嘗試用的也就以上幾個(gè),當(dāng)然,還有很多優(yōu)秀的插件,附上地址,大家自行瀏覽選擇使用即可~
https://www.zhihu.com/question/28026027
Android 布局優(yōu)化
布局優(yōu)化,這是個(gè)有意思的話題,下面通過(guò)不同例子一起來(lái)看看吧~
一、巧用android:drawab系列+Style提高代碼可讀性以及簡(jiǎn)潔性
TextView這個(gè)東西,想必大家用的都熟透了吧?今天我們來(lái)說(shuō)說(shuō)如何更好玩轉(zhuǎn)TextView。
舉一個(gè)很通用的例子,微信"我"的界面布局
大家注意到"錢(qián)包","收藏","相冊(cè)"等布局了么?
以前,我們會(huì)這么寫(xiě):
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="15dp"
- android:background="#FFF"
- android:orientation="horizontal"
- android:padding="15dp">
- <ImageView
- android:layout_width="30dp"
- android:layout_height="30dp"
- android:background="@mipmap/ic_launcher_1"/>
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:text="錢(qián)包"/>
- </LinearLayout>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="15dp"
- android:background="#FFF"
- android:orientation="horizontal"
- android:padding="15dp">
- <ImageView
- android:layout_width="30dp"
- android:layout_height="30dp"
- android:background="@mipmap/ic_launcher_1"/>
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:text="錢(qián)包"/>
- </LinearLayout>
- ... ...
如果點(diǎn)擊項(xiàng)多的話,反而顯得亂,而且多了很多無(wú)用的代碼,今天我們來(lái)嘗試新的玩法~
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="15dp"
- android:background="#FFF"
- android:drawableLeft="@mipmap/ic_launcher_1"
- android:drawablePadding="10dp"
- android:gravity="center_vertical"
- android:padding="10dp"
- android:text="錢(qián)包"/>
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="15dp"
- android:background="#FFF"
- android:drawableLeft="@mipmap/ic_launcher_1"
- android:drawablePadding="10dp"
- android:gravity="center_vertical"
- android:padding="10dp"
- android:text="錢(qián)包"/>
- ... ...
倆者實(shí)現(xiàn)效果如下:
TextView多的話還可以提取Style文件,代碼簡(jiǎn)潔易讀。
二、TextView跑馬燈
附上效果圖:
部分代碼如下:
- <TextView
- android:id="@+id/id_test"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="15dp"
- android:background="#FFF"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:marqueeRepeatLimit="marquee_forever"
- android:text="失戀算個(gè)啥?輕輕的,你走吧,千萬(wàn)別后悔,因?yàn)橹灰阋粨]手,就會(huì)發(fā)現(xiàn),已經(jīng)有那等不及的意中人,正偷偷摸摸拉你的手!"/>
記得Activity要設(shè)置一個(gè)屬性,否則無(wú)效。
- findViewById(R.id.id_test).setSelected(true);
要想實(shí)現(xiàn)跑馬燈效果,必須滿(mǎn)足一個(gè)條件,就是TextView內(nèi)容必須超出屏幕,否則無(wú)效!當(dāng)然你可以自定義。
三、關(guān)于顯示價(jià)格優(yōu)化
效果如下:
按照之前的想法,我們會(huì)這么玩:
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="您需要支付:"/><TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="¥50"
- android:textColor="@android:color/holo_red_light"/>
可有簡(jiǎn)單用法,干嘛還多寫(xiě)一個(gè)TextView,這不是浪費(fèi)嘛?瞧著~
string文件中這樣寫(xiě):
- <string name="string_pay_price">您需要支付:%1$s</string> <!-- %1$s:代碼***位是String類(lèi)型,同理,第二位%2$s -->
Activity定義方法:
- private void setPayPrice(String payPrice) {
- tvShow.setText(getString(R.string.string_pay_price, payPrice));
- SpannableStringBuilder builder = new SpannableStringBuilder(tvShow.getText().toString());
- ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.RED); // 根據(jù)要求自定義顏色值
- builder.setSpan(colorSpan, 4, tvShow.getText().toString().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- tvShow.setText(builder);
- }
四、自動(dòng)鏈接TextView內(nèi)容,例如網(wǎng)址,電話,e-mail等
效果如下:
代碼部分:
- <TextView
- android:id="@+id/id_test"
- android:layout_width="wrap_content"
- android:autoLink="all"
- android:text="賀賀博文地址:http://blog.csdn.net/u012400885 \n查詢(xún)電話:13811604922"
- android:layout_height="wrap_content"/>
五、巧用LinearLayout,節(jié)省不必要代碼~
下面為大家附上一個(gè)簡(jiǎn)單效果圖,大家首先想想,如果是你,怎么寫(xiě)?
這里為大家引入另一種寫(xiě)法,也就是小標(biāo)題如何巧用LinearLayout
首先編寫(xiě)shape文件,很簡(jiǎn)單,設(shè)置高度和顏色。
- <shape xmlns:android="http://schemas.android.com/apk/res/android">
- <size android:height="15dp"/>
- <solid android:color="#FFF000"/></shape>
其次,在布局文件中設(shè)置divider以及showDividers屬性即可。
- <?xml version="1.0" encoding="utf-8"?><LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="#FFF"
- android:divider="@drawable/shape_0"
- android:orientation="vertical"
- android:showDividers="middle|beginning|end"
- tools:context="cn.hlq.hlqstudyandroid.MainActivity">
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:drawableLeft="@mipmap/ic_launcher_1"
- android:drawablePadding="10dp"
- android:gravity="center_vertical"
- android:padding="10dp"
- android:text="item項(xiàng)111"/>
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:drawableLeft="@mipmap/ic_launcher_1"
- android:drawablePadding="10dp"
- android:gravity="center_vertical"
- android:padding="10dp"
- android:text="item項(xiàng)222"/></LinearLayout>
下面簡(jiǎn)單介紹下android:showDividers屬性:
android:showDividers="middle|beginning|end":鑒名其意,三個(gè)屬性值分別為 中間 開(kāi)始部分 結(jié)束部分,也就是在三個(gè)部分顯示分割線。
有個(gè)哥兒們會(huì)說(shuō)了,不是還有v7包下LinearLayoutCompat不也能實(shí)現(xiàn)分割線嗎?
確實(shí),不過(guò)我試了下,感覺(jué)倆者一樣,這里就不做過(guò)分說(shuō)明了~
六、禁止截屏功能,間接保護(hù)App
想想實(shí)現(xiàn)禁止應(yīng)用截屏,只需要一行代碼,如下:
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
防止setContentView后即可,之后截屏的時(shí)候,會(huì)提示以下內(nèi)容:
結(jié)束語(yǔ)
東西很簡(jiǎn)單,LZ簡(jiǎn)單總結(jié)了下,給自己留點(diǎn)東西~