在命令行里面添加文本
按鍵盤i鍵轉(zhuǎn)換到文本輸入
輸入 文本
輸入完畢刽肠,按ESC 鍵食茎,然后按:wq 保存后退出
友盟分享中qq/Qzone分享沒有回調(diào)的解決方案
1.確保在分享所在Activity里實(shí)現(xiàn)onActivityresult方法趟紊,注意不能在fragment里實(shí)現(xiàn)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
2.確保在manifest xml中配置了正確的android:scheme <data android:scheme="tencent100424468" /> 注意這里的APPid必須和代碼中配置的QQ APPid一致区端,并且注意tencent前綴不要刪掉
Android Studio 中小寫字符串快速轉(zhuǎn)化為大寫常量表示
選中小寫字符串右鍵顯示選中
就會生成如下代碼:
public static final String EASY_AS = "easy as";
WebView與 JS 的交互中迹鹅,由于 JavaBridge 并不在主線程中权旷,我們需要主線程來操作 UI 。
項(xiàng)目中出現(xiàn) bug,在原生控件點(diǎn)擊調(diào)用 popupWindow顯示后面的背景戏锹,而在webView 中調(diào)用JS 彈出popupWindow不顯示背景冠胯,改為js方法在主線程中調(diào)用,bug解決锦针。
Mac 用終端打開.bash_profile文件配置環(huán)境
open ~/.bash_profile
判斷接口是否有效方法
sign 是對參數(shù)的加密 荠察,前端跟后臺商量好一個(gè)加密算法。參數(shù)傳到后臺奈搜,后臺通過對參數(shù)進(jìn)行加密獲得一個(gè) sign值悉盆,然后與前端給的 sign 做比對,相同的話就是正常請求馋吗,不同則為非法請求焕盟。
RelativeLayout 屬性
// 相對于給定ID控件
android:layout_above 將該控件的底部置于給定ID的控件之上;
**android:layout_below ** 將該控件的底部置于給定ID的控件之下;
android:layout_toLeftOf 將該控件的右邊緣與給定ID的控件左邊緣對齊;
android:layout_toRightOf 將該控件的左邊緣與給定ID的控件右邊緣對齊;
Mac下在command里面輸入pwd是查看系統(tǒng)的根目錄
java所說的代碼穩(wěn)定說的是Java運(yùn)行時(shí)的虛擬機(jī)穩(wěn)定
popupWindow中l(wèi)istView的條目高度顯示不完全問題
在tiem的XML中設(shè)置只設(shè)置了條目的總高度,但是不識別宏粤,需要設(shè)置里面控件的高度脚翘,才能展示完全
打開github上的項(xiàng)目報(bào)錯(cuò):Error:The SDK Build Tools revision (22.0.1) is too low for project ':app'. Minimum required is 25.0.
原因是下圖紅框里面默認(rèn)的是2.0.+ ,gradle會默認(rèn)加載最高版本绍哎,改為自己的gradle版本就好
listview中Adapter的初始化一般應(yīng)該放在聯(lián)網(wǎng)之前来农,不要放在聯(lián)網(wǎng)成功里面。
在Adapter中添加如下代碼:
public void setData(List<data> list){
this.list=list;
notifyDataSetChanged();
}
在聯(lián)網(wǎng)成功拿到數(shù)據(jù)之后再調(diào)用此方法崇堰。
listView的條目點(diǎn)擊事件也不宜放在聯(lián)網(wǎng)成功里面也需要放在聯(lián)網(wǎng)之前沃于。否則來回切換頁面且頁面處于網(wǎng)絡(luò)不好的時(shí)候,會報(bào)空指針的崩潰海诲,listView的對象找不到繁莹。
studio調(diào)出lint去除無用資源
singleTop與singleTask的區(qū)別
singleTop模式:如果發(fā)現(xiàn)有對應(yīng)的Activity實(shí)例正位于棧頂,則重復(fù)利用饿肺,不再生成新的實(shí)例蒋困。如果棧頂沒有,則重新生成實(shí)例敬辣。棧中有可能有多個(gè)相同的activity
singleTask模式:如果發(fā)現(xiàn)有對應(yīng)的Activity實(shí)例雪标,則使此Activity實(shí)例之上的其他Activity實(shí)例統(tǒng)統(tǒng)出棧零院,使此Activity實(shí)例成為棧頂對象,顯示到幕前村刨。棧中只有一個(gè)相同的activity
開發(fā)中單例經(jīng)常需要持有Context對象告抄,要保證Context和AppLication的生命周期一樣,即context.getApplicationContext()
Studio刪除項(xiàng)目中所有斷點(diǎn)
ScrollView里面嵌套的布局只能是一個(gè)布局嵌牺,不可能是兩個(gè)布局并存打洼。
H.264是國際標(biāo)準(zhǔn)化組織(ISO)和國際電信聯(lián)盟(ITU)共同提出的繼MPEG4之后的新一代數(shù)字視頻壓縮格式。現(xiàn)在是最普遍常用的逆粹。
項(xiàng)目中的七牛云播放器目前只支持H264募疮,但是壓縮視頻的時(shí)候并沒有采用這個(gè)格式,播放的時(shí)候就會出現(xiàn)只聽見聲音而看不畫面的情況僻弹。
APP防止惡意注冊
輸入手機(jī)號點(diǎn)擊按鈕的時(shí)候在SP里面點(diǎn)擊的 時(shí)間戳 做一次記錄阿浓,
時(shí)間戳轉(zhuǎn)化為年月日格式,通過如下代碼實(shí)現(xiàn):
public static String timeToData(long time) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String d = format.format(time);
return d;
}
然后進(jìn)行下次點(diǎn)擊是否在同一天的判斷蹋绽,當(dāng)一天之內(nèi)點(diǎn)擊按鈕的次數(shù)大于2次的時(shí)候就會彈出驗(yàn)證圖片的提示框芭毙,圖片的地址前段是固定的,就跟接口請求差不多卸耘,變化只是時(shí)間戳的參數(shù)變化退敦,這樣每次請求的圖片就不一樣了,圖片是后臺語言自動生成蚣抗。
Glide的本地緩存地址
Glide源碼里面的默認(rèn)文件下載地址為**getCacheDir( ) **,
為手機(jī)內(nèi)部存儲,存儲地址如下:
data/data/App的包名/cache/glide 默認(rèn)是隱藏的侈百,只有root之后才能看到
getExternalCacheDir( ) 為手機(jī)外部存儲,存儲地址如下:
Android/data/App的包名/cache/ 默認(rèn)是顯示的
如果我們想緩存圖片等比較耗空間的文件忠聚,推薦放在getExternalCacheDir()所在的文件下面设哗,這個(gè)文件和getCacheDir()很像,都可以放緩存文件两蟀,在APP被卸載的時(shí)候,都會被系統(tǒng)刪除震缭,而且緩存的內(nèi)容對其他APP是相對私有的赂毯。
項(xiàng)目中l(wèi)ayout-sw600dp文件夾的含義
small width 最小寬度為600dp的即視為平板
.9圖的操作
左邊 上邊 拉伸區(qū),畫點(diǎn)
下邊 右邊 間隔區(qū)拣宰,畫線党涕,定義內(nèi)容所在區(qū)域的上下左右空白區(qū)域大小
點(diǎn)9圖四個(gè)位置的作用
左 2個(gè)點(diǎn)用來對應(yīng)用高度等比例的拉伸(不影響右邊的圖標(biāo))
上 1個(gè)點(diǎn)對圖標(biāo)左邊的位置進(jìn)行拉伸
右 1條線對文字的高度的限制
下 1條線對文字的長度進(jìn)行限制
要居中的時(shí)候設(shè)置padding為0
擁抱SVG:苦惱于圖片適配 in Android?
Android對于 SVG 的支持是從 Android L 開始的巡社,它的 SDK 里面加入了 VectorDrawable , AnimatedVectorDrawable 等類幫助我們構(gòu)建 SVG 圖形以及動畫膛堤,并且你可以在 xml 文件里面直接使用 標(biāo)簽繪制 SVG 圖像以及 標(biāo)簽為 SVG 圖像分配動畫。
個(gè)人感覺現(xiàn)在適用的是能用畫筆畫的圖型晌该,如:返回箭頭
(http://blog.csdn.net/luoyanglizi/article/details/52589234)
推送跳轉(zhuǎn)方法
點(diǎn)擊推送進(jìn)行跳轉(zhuǎn)的時(shí)候肥荔,先跳到閃屏頁绿渣,然后在閃屏頁里面設(shè)置跳轉(zhuǎn)兩次,主頁面在前燕耿,要進(jìn)的頁面在后中符。這樣視覺上就像沒有打開主頁面似的,進(jìn)入閃屏頁之后直接就進(jìn)了推送展示頁
** Android Studio開發(fā)工具中誉帅,打開DDMS淀散,具體的方式如圖:**
** EventBus接收發(fā)來的信息的時(shí)候一定要記得注冊!Q料恰档插!**
EventBus.getDefault().register(this);
EventBus.getDefault().unregister(this);
設(shè)置按鈕監(jiān)聽左邊Edittext的時(shí)候這樣設(shè)置:
textEditor.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
sendBtn.setEnabled(!s.toString().isEmpty());
});
在 drawable 文件中的圖片獲取 bitmap 對象
Resources res = getResources();
Bitmap bitmap = BitmapFactory.decodeResource(res, id);
id 為 R.drawable. 圖片名稱
** DP 與 SP 的區(qū)別:**
使用 sp 作為字體大小單位,會隨著系統(tǒng)的字體大小改變
而 dp 作為單位則不會.
sp 除了受屏幕密度影響外,還受到用戶的字體大小影響
通常情況下,建議使用 sp 來跟隨用戶字體大小設(shè)置。除非一些特殊的情況,不想跟隨系統(tǒng)字體變化的,可以使用 dp.
** 布局優(yōu)化**
1.RelativeLayout會讓子View調(diào)用2次onMeasure亚再,LinearLayout 在有weight時(shí)阀捅,也會調(diào)用子View2次onMeasure
2.RelativeLayout的子View如果高度和RelativeLayout不同,則會引發(fā)效率問題针余,當(dāng)子View很復(fù)雜時(shí)饲鄙,這個(gè)問題會更加嚴(yán)重。如果可以圆雁,盡量使用padding代替margin忍级。
3.在不影響層級深度的情況下,使用LinearLayout和FrameLayout而不是RelativeLayout。
最后再思考一下文章開頭那個(gè)矛盾的問題伪朽,為什么Google給開發(fā)者默認(rèn)新建了個(gè)RelativeLayout轴咱,而自己卻在DecorView中用了個(gè)LinearLayout。因?yàn)镈ecorView的層級深度是已知而且固定的烈涮,上面一個(gè)標(biāo)題欄朴肺,下面一個(gè)內(nèi)容欄。采用RelativeLayout并不會降低層級深度坚洽,所以此時(shí)在根節(jié)點(diǎn)上用LinearLayout是效率最高的戈稿。而之所以給開發(fā)者默認(rèn)新建了個(gè)RelativeLayout是希望開發(fā)者能采用盡量少的View層級來表達(dá)布局以實(shí)現(xiàn)性能最優(yōu),因?yàn)閺?fù)雜的View嵌套對性能的影響會更大一些讶舰。
4.能用兩層LinearLayout鞍盗,盡量用一個(gè)RelativeLayout,在時(shí)間上此時(shí)RelativeLayout耗時(shí)更小跳昼。另外LinearLayout慎用layout_weight,也將會增加一倍耗時(shí)操作般甲。由于使用LinearLayout的layout_weight,大多數(shù)時(shí)間是不一樣的,這會降低測量的速度鹅颊。這只是一個(gè)如何合理使用Layout的案例敷存,必要的時(shí)候,你要小心考慮是否用layout weight堪伍∶常總之減少層級結(jié)構(gòu)觅闽,才是王道,讓onMeasure做延遲加載挽牢,用viewStub谱煤,include等一些技巧。
** RelativeLayout與FrameLayout 的區(qū)別**
The RelativeLayout can use :
android:layout_toLeftOf="@id/some_view"
android:layout_toRightOf="@id/some_view"
android:layout_above="@id/some_view"
android:layout_below="@id/some_view"
to make sure views lineup correctly in relation to each other. FrameLayout is very similar except it's only using gravity to put display it's views (with no relation).
RelativeLayout更能精準(zhǔn)擺放控件的位置禽拔,而FrameLayout 通過重心位置來擺放控件刘离,F(xiàn)rameLayout相當(dāng)于RelativeLayout的閹割版,比RelativeLayout更小巧睹栖。用的時(shí)候看需求硫惕。