1、當(dāng)當(dāng)前方法里面要跳出去寫另外一個方法的時候兆解,如果另外那個方法里面如果需要大環(huán)境馆铁,那么必須把另外那個方法放在當(dāng)前方法外面,去獲取大環(huán)境锅睛。
2埠巨、注意历谍,在進(jìn)行下載操作時,如果是下載到SD卡中辣垒,別忘了加權(quán)限望侈。
3、注意勋桶,用隱式意圖跳轉(zhuǎn)時脱衙、如果是要加category屬性,那么方法不是set~,而是add~
4例驹、注意岂丘,一般listview和gridview的適配器不要抽取到一個類中單獨書寫,不然可能出現(xiàn)開啟不了活動的情況眠饮,原因是奥帘,加載條目的事情,必須在系統(tǒng)開啟活動之前完成仪召,單獨寫一個類的時候寨蹋,運用打氣筒時,需要傳一個上下文扔茅,因為此時已旧,活動還沒有開啟,所以不能用this召娜,直接new也會報錯运褪,new其他活動的實例可能能成功但是造成了不必要的麻煩。
5玖瘸、注意秸讹,在使用自定義控件,填充view的時候雅倒,注意不要使用重載方法addView(),而是直接用this.addView()璃诀,直接添加,要不然會出錯蔑匣。
6劣欢、注意,如果要使自定義控件有點擊事件裁良,不僅僅要重寫一個isClickable()方法凿将,并返回true,而且在只用XML(布局文件)中使用自定義控件的時候還要設(shè)置android:clickable="true",要不然不具備點擊事件价脾,也就導(dǎo)致了添加了選擇器卻點擊后不變樣子的情況牧抵。
7、注意彼棍,在設(shè)置自定義控件的自定義屬性的時候(attrs.xml)灭忠,屬性的返回值類型一定要寫成小寫膳算,要不然系統(tǒng)不識別,例如"String"一定要寫成"string"弛作。
8涕蜂、用彈窗對象Buelder對象的create()方法可以得到一個Dialog對象用來執(zhí)行dismiss(),以達(dá)到關(guān)閉窗體的作用映琳,但是机隙,每次執(zhí)行create(),都是重新NEW了一個AlertDialog對象萨西,所以有鹿,如果在局部使用的時候,最好在大環(huán)境中定義出來(全局)谎脯,這樣就不會出錯了葱跋。
9、當(dāng)為一個布局設(shè)置背景的時候源梭,不要單獨使用ImageView控件來設(shè)置src娱俺,而是直接在那個布局的屬性中添加background,要不然可能出現(xiàn)背景左右沒有填滿屏幕的情況废麻。
10荠卷、抽取樣式也有一定的格式,
<style name="【樣式名稱】"><item name="【屬性】">【屬性值】></item></style>
11烛愧、在狀態(tài)選擇器中油宜,使用圖片時,如果需要一張純色的圖片怜姿,不可以直接設(shè)置顏色值慎冤,這個時候可以用到color.xml這種東西,在res -> values -> colors.xml 中定義社牲,作用就是將一個純色轉(zhuǎn)換成一個純色的圖片資源粪薛。
12悴了、在廣播接收者中搏恤,如果OnReceive里面的方法執(zhí)行的時間超過10秒的話,就會不繼續(xù)執(zhí)行湃交,如果必須要執(zhí)行耗時操作的話熟空,一般放在服務(wù)里面進(jìn)行執(zhí)行。
13搞莺、通過RadioGroup的getCheckedRadioButtonId()方法得到的返回值(int)是RadioButton的id值息罗。
14、設(shè)置當(dāng)listview沒有數(shù)據(jù)顯示的時候,應(yīng)該顯示什么樣的view對象mListView.setEmptyView(mEmpty);
15才沧、在進(jìn)行電話攔截的時候迈喉,用的是不是廣播接收者绍刮,而是,電話的管理者
16挨摸、在ListView中如果需要分割線孩革,那么就是用divider屬性,就可以設(shè)置得运,可以用一張圖片在做膝蜈,也可以用一個顏色來做。但是需要注意的是熔掺,當(dāng)設(shè)置的是顏色的時候饱搏,必須設(shè)置顏色的高度(通過dividerHeight這個屬性來設(shè)置,單位為dp)置逻,因為顏色是沒有高度的推沸,用圖片充當(dāng)?shù)臅r候就不用設(shè)置高度,以為圖片本身就有一個高度券坞。
17坤学、可以通過一個控件的getWindow()方法得到自己所在的窗口的對象,通過這個對象可以得到自己在這個窗口中的屬性對象(getAttribute()),得到了屬性的對象(params)后报慕,就可以通過屬性的對象設(shè)置一些新的屬性給自己深浮,然后最后要注意的是,設(shè)置完成以后必須要再將這個屬性對象設(shè)置給我們的窗口對象(setAttribute(params))眠冈。
18飞苇、在自定義一個Dialog(彈窗)的時候,我們可以自定義它的樣式蜗顽,自定義它的視圖布卡,我們繼承Dialog類以后,里面有一個非常特殊的方法雇盖,onCreate()重載方法忿等,里面有一個setContentview的方法,這里這個方法和Activity里面的那個崔挖。贸街。。狸相。薛匪。非常相似了,就是為自己加載一個布局樣式脓鹃,這樣我們就在我們的彈窗中自定義出自己想要的風(fēng)格逸尖,需要注意的是當(dāng)我們使用自定義的Dialog主題樣式的時候,我們在兩個參數(shù)的構(gòu)造函數(shù)里面設(shè)置主題,當(dāng)設(shè)置了自己所需要的主題時娇跟,如果不引用系統(tǒng)自帶的主題的話岩齿,會導(dǎo)致我們的自定義Dialog全屏,這并不是我們想看到的苞俘,所以這里我們必須通過在自定義的屬性的標(biāo)簽里面用parent這個關(guān)鍵字(parent:"[系統(tǒng)的主題]")纯衍,來引用我們系統(tǒng)的Dialog主題,相當(dāng)于我們只是覆蓋了部分的主題苗胀。襟诸,而一些關(guān)鍵的主題風(fēng)格還是用的系統(tǒng)的樣式。
19基协、在安卓中有兩個定義樣式的文件一個是style文件歌亲,一個是theme文件,他們有什么區(qū)別呢澜驮?style文件主要是用來設(shè)置控件的樣式的陷揪,而theme主要是用來設(shè)置空間的主題的。大體方向上是屬于一類東西杂穷,但是在細(xì)節(jié)上還是有區(qū)別的悍缠。
20、當(dāng)我們 拷貝了一些系統(tǒng)的主題樣式來使用的時候耐量,一些屬性的開頭沒有加命名控件(Android:)飞蚓,如果我們不加的話,可能會報錯廊蜒,所以拷貝系統(tǒng)的風(fēng)格樣式來用的時候趴拧,我們一般都要在沒有加命名空間的位置加上(Android:)。
21山叮、當(dāng)listView中有固定的條目類型時著榴,不需要復(fù)用,那么就需要將服用的代碼提取到需要服用的條目加載的里面屁倔,要不然會出現(xiàn)空指針異常脑又。
22、怎么在谷歌提供的API demos里面找到我們想要的動畫效果并抄襲復(fù)用锐借?先看你需要的那個效果的界面上有什么關(guān)鍵字问麸,然后可以在.XML文件中搜索那個關(guān)鍵字找到string.xml文件,然后看哪個布局文件里面引用了這個關(guān)鍵字瞎饲,就好到了界面的布局口叙,找到布局以后,就在.JAVA文件中搜索嗅战,看哪個文件加載了這個布局,然后分析,那個效果是哪個控件觸發(fā)的驮捍,就去找那個控件的監(jiān)聽事件疟呐,然后代碼改一改,缺插補(bǔ)器的話找一找东且,然后你懂得启具!
23、在ListView中如果存在CheckBox的話珊泳,如果用盒子(Holder)鲁冯,對View進(jìn)行復(fù)用的話,其選中狀態(tài)也會跟著復(fù)用色查,解決的辦法就是薯演,讓它不可點擊,不可存在焦點秧了,把每個條目是否選中的信息存在BEAN中跨扮,然后調(diào)用NotifydataSetChange方法(調(diào)用這個方法會回調(diào)適配器中的GetCount和GetView這兩個方法),然后在適配器中用代碼手動的設(shè)置相應(yīng)的條目是否選中验毡。
24衡创、當(dāng)一個控件遮擋了另外的View的時候,如果后面的View有點擊事件晶通,那么璃氢,我們點擊我們上方控件
的時候,就會影響到 下面的View的點擊事件狮辽,所以拔莱,一般我們都要屏蔽了下方View的點擊事件,做法就
是在我們的上方控件里面設(shè)置Clickable屬性為真隘竭。
25塘秦、遠(yuǎn)程布局無法findViewById(),用里面提供的方法來設(shè)置里面的控件屬性。
26动看、不僅僅字符串可以進(jìn)行國際化尊剔,圖片也可以進(jìn)行國際化。
27菱皆、當(dāng)一個模塊需要另外一個模塊提供數(shù)據(jù)的時候须误,為了降低耦合我們采取回調(diào)的方式進(jìn)行數(shù)據(jù)傳遞。
在需要數(shù)據(jù)的模塊內(nèi)實現(xiàn)一個接口并實現(xiàn)方法仇轻,然后把接口對象傳遞給提供數(shù)據(jù)的模塊京痢,提供數(shù)據(jù)的模
塊只需要將數(shù)據(jù)放在接口的方法參數(shù)中,就相當(dāng)于調(diào)用了實現(xiàn)方法篷店,實現(xiàn)了相應(yīng)的需求祭椰。
28臭家、異步加載不能取消,只能設(shè)置標(biāo)示(cancle(true))方淤,在各個方法中獲取標(biāo)示來判斷然后屏蔽以
前執(zhí)行的代碼钉赁,來讓異步不執(zhí)行代碼了,只是一個偽取消操作携茂。
29你踩、安卓中,不允許單個的應(yīng)用程序清理其他程序的緩存讳苦,一鍵清理其實是使用了安卓的一個BUG來實現(xiàn)
的带膜。用包管理者里面的freestorageAndnotify方法來清除數(shù)據(jù),利用的是安卓中如果請求的空間大小大
于總大小的話鸳谜,就會清空已用空間膝藕,這個方法需要利用反射來做,并且需要加上清除APP緩存的權(quán)限卿堂。
30束莫、所有的aidl操作都是在子線程中進(jìn)行的,因為aidl操作一般都是耗時操作草描。
31览绿、包管理者,可以通過一個包名穗慕,得到打開這個應(yīng)用程序的意圖對象饿敲。
32、在安卓打包混淆的時候逛绵,自定義控件混淆不了怀各,四大組件也混淆不了。因為安卓系統(tǒng)在找的時候术浪,混淆了就找不到瓢对。
33、與ROOT相關(guān)的一個可執(zhí)行文件在system目錄下的xbin文件夾里面胰苏,叫做su硕蛹。只要放在這個指定目錄獲取了ROOT權(quán)限,但是需要注意的是硕并,現(xiàn)在很多的定制系統(tǒng)有的屏蔽或者改變了這個可執(zhí)行文件的位置法焰。這樣就可以去通過執(zhí)行這個文件,判斷手機(jī)是否ROOT了倔毙,執(zhí)行失敗說明沒有ROOT埃仪。
34、ListView的條目中如果有可以執(zhí)行點擊事件的控件的話陕赃,會搶奪條目的點擊事件卵蛉,如果需要分開處理點擊事件颁股,必須設(shè)置一下,條目的容器屬性(后裔事件)毙玻,descendantfocusability屬性豌蟋,選擇不同的處理方式廊散。
35桑滩、ListView默認(rèn)的上下邊緣有一個衰弱的顏色效果,如果要取消的話允睹,可以設(shè)置其fadingedgelength屬性运准,英文翻譯(衰弱邊緣長度)。與這個屬性類似的還有一個條目之間的分割線的長度dividelength屬性(設(shè)置分割線的高度)缭受。
36胁澳、自定義控件時,如果是在主線程中用invalidate米者,在子線程中用postinvalidata韭畸,這兩個方法可以回調(diào)onDraw方法或者ComputeScroll方法,區(qū)別在于蔓搞,如果繼承的是View就調(diào)用前者胰丁,如果是繼承的是ViewGroup就調(diào)用后者。
37喂分、在使用ViewPager(V4包)時锦庸,繼承適配器時,要手動添加兩個必要的實現(xiàn)方法蒲祈,注意甘萧!是手動添加,我至今不明白為什么這樣的必須實現(xiàn)的兩個方法,為什么不定義為抽象方法靡砌,這是我對谷歌工程師很不解的一點期贫,不過記住就好,一個是instantiateItem怪得,一個是destroyItem方法。并且在instantiateItem中钝鸽,得到一個子View的引用后并不能像ListView的適配器一樣直接返回汇恤,而是要手動的用addView方法添加,并且拔恰,這里這個方法的返回值變成了緩存View的對象(在ViewPager里最多有三緩存對象因谎,左右最多各一個,當(dāng)滑動時颜懊,如果左右超出了相鄰位置后财岔,會從緩存中刪掉那個條目)风皿。
38、ListView的條目中存在可以點擊的控件時匠璧,會搶奪條目本身的點擊事件桐款,如果不希望這樣,需要在條目的布局的根布局中添加adescendantFocusability屬性夷恍,屬性值設(shè)置為blockDescendants魔眨,這個屬性的名字叫做后裔事件處理,其實就是設(shè)置怎么處理孩子與自己沖突的事件酿雪。
39遏暴、當(dāng)一個控件還沒有完全布局到界面上時,不能調(diào)用getWidth這樣的方法得到控件的寬高指黎,因為這個方法只有當(dāng)活動的onCreate方法執(zhí)行完以后朋凉,才有值,在還沒有使用某個布局或者控件的時候醋安,如果想的到其寬高杂彭,只能通過測量后,得到一個測量的寬度吓揪。
40亲怠、在設(shè)置一個View隱藏時,一種是View.GONE磺芭,一種是View.INVISIBLE赁炎,兩種方法都可以隱藏,但是又有小小的區(qū)別钾腺,前者隱藏后徙垫,連布局本身都沒有了,可能會影響到父布局放棒,比如父布局的高設(shè)置為包裹內(nèi)容姻报,那么就撐不起來了!后者隱藏后布局本身還在间螟,還能為父布局撐起來吴旋。
41、在繼承ViewGroup來做自定義控件時厢破,為子孩子設(shè)置布局時荣瑟,設(shè)置的是子孩子的左上角,右下角的坐標(biāo)摩泪。這一點和其他地方有一些區(qū)別笆焰,需要特殊記憶。