當前位置:首頁 » 安卓系統 » android使用技巧

android使用技巧

發布時間: 2022-08-10 15:25:48

⑴ 第一次接觸Android的系統,求推薦一些實用軟體與游戲。 還有最好有關於新手使用Android系統的技巧,謝謝

【由布凱恰原創】
Android應用主要有幾類,LZ要實用,我就撇開華而不實的咯:

輸入法:
比較主流的android中文輸入法有搜狗、Google和觸寶,這塊其實大同小異,個人推薦觸寶,自帶糾錯功能,即使不小心按錯鍵位的話,它也有很高的識別率,給出你原本想輸入的片語,這個設計比較人性化。

撥號器、通話、短消息、聯系人管理:
手機自帶的撥號器和短消息管理程序功能很簡單,有些應用可以強化這些方面的功能,比如提供來電和簡訊智能屏蔽、智能簡訊群發等等。
之前最流行的通話輔助應用是連雲助手,但目前觸寶智能撥號有趕超之勢,功能一樣齊全而強大,缺點是比較佔用資源,配置低的話用著會卡機。
現在騰訊也出了一款「QQ通訊錄」,其實是把撥號器、通話記錄、聯系人和短消息集成在同一個應用里,還有智能撥號匹配等功能,界面也比較美觀,佔用資源也較少,推薦。
簡訊息方面,如果你對界面不太在意的話,個人覺得沒有非常有價值的應用;目前在用的,有一款SMS Popup,收到簡訊時可以直接在桌面上彈出窗口(即使在鎖屏狀態下),方便你馬上處理;還有一款SMS Backup,可以把短消息自動同步到你的Gmail郵箱里,即使換了手機也可以很方便地導回來。
另外還有一款叫「蠟筆」的應用,號稱能把你的通訊錄、通話記錄和簡訊全部同步到它的網站上,也可以試試。

拍照加強:
FxCamera和360Camera現在是用得最多的,這兩個應用都集成了膠片、針孔、寶麗來等很多種照片特效,還挺逼真;如果要對拍好的照片進行簡單編輯處理的話,可以用Picsay。

便簽筆記:
AKNotepad的資格最老了,評價也很高,寫完還可以直接作為郵件或者簡訊發給別人;不過我現在最青睞的是Catch,因為是英文版國內用得不多,它可以跟它的網站無縫同步,所以,你可以把別人在QQ上發給你的采購清單粘貼在Catch網站上,到了商場,聯網打開Catch就行了,很方便。它還支持照片和網址存儲

記賬:
推薦隨手記,金蝶出品的,也分手機端和網頁端,單獨使用都是免費的,不過如果要開通二者同步的話,要出20塊錢買VIP。用下來,20塊的價格還是合理的。

瀏覽網頁:
Wap可以用UC瀏覽器,Web則強力推薦Dolphin(海豚),特別是它的Mini版,絕對的No.1,Opera和FireFox也有Android端的瀏覽器,你可以試試,沒海豚好用。

在線聊天和SNS:
聊天:QQ有官方版和aQQ,前者網路更穩定,後者功能略強一些,自己取捨吧;MSN則有Hi MSN;還有一款Meboo IM,集成了MSN、Google Talk和多個國外流行的IM協議,一個頂幾個,也比較推薦的。
SNS應用基本是網站的移植就看你的需要了,各大微博、人人、開心、街旁,在android上都有官方和非官方的客戶端。

生活助手:
天氣預報:這個一定要有,國外的Fancy體驗最好,國內的「墨跡天氣」號稱中文最強;
地圖導航:把原裝的谷歌地圖升級到最新版,它已經足夠強大了;還有中國地鐵、Emo公交等可以作為輔助
消費指南:大眾點評,和Google的「本地通」,幫助你找到周邊的商戶、銀行等設施,還可以看到它們在地圖上的位置和別人的點評。

媒體播放:
圖片:JustPicture,反應飛快,界面也可以,推薦用來替代系統原裝的圖庫。
視頻:mVideoPlayer,不是最熱門的,但是該有的功能全部到位,也不佔系統。
音頻:現在在用PlayerPro,界面和音質兼顧。

電子書閱讀:
iReader:如果你喜歡純粹的話,鼎力推薦這一款,而且是最老的版本。

文檔瀏覽:
PepliGo Reader用來瀏覽Pdf,是神器級的。
OfficeSuite辦公套件,用來瀏覽和編輯Office文檔,也是神器級的。

系統輔助:
MyBackup(我的備份)可以用來定期備份你手機上所有的數據信息,更專業一點的有「鈦備份」。
AdvancedTaskKiller:人氣最高的進程殺手,一鍵釋放內存。
RE管理器:它是一個擁有Root許可權的資源管理器,你可以通過它來讀寫受保護的系統文件,不過很新手的話就不推薦了。
AppMonster:程序怪物,方便地管理和卸載你所有安裝的應用。

游戲方面,重力感應的「憤怒的小鳥」現在最火,Doodle Jump(塗鴉跳)也不錯,挺耐玩;還有一個叫做Alchemy的游戲,在市場上是五顆星,不過這是個考驗記憶力、想像力和耐性的游戲,不是所有人都喜歡。

我已經盡可能地精簡再精簡了,如果LZ對哪方面的應用特別感興趣,我再補充吧。

關於使用Android手機系統的技巧:

其實主要有三點
1,善用雲同步
Android是谷歌開發的智能手機系統,其中的很多基礎功能是和Google的互聯網應用無縫銜接的,比如手機上的日程表、聯系人、郵件、文檔、閱讀器還有地圖等等,都可以找到對應的網路應用(你可以理解為網站),而且是雙向同步,比如你在電腦上標注一下谷歌地圖,打開手機地圖的時候馬上就能看到這個標記;你在手機上添加一個聯系人,再打開GoogleContacts網頁發現他已經在上面了。所以建議你先培養對Google這些網路產品的興趣,Google的粉絲比別人更懂得Android的好處和樂趣。
相應地,不少Android應用都有可以將數據存儲到遠程的伺服器上並訪問(傳說中的雲同步),像賬本、筆記等重要的應用,我都優先考慮有雲端的,這樣就不用怕數據丟失甚至硬體損毀,而且可以在手機、家用電腦、公司電腦等多個設備上及時訪問和編輯。

2,控制電量和流量的消耗
不客氣地說,不能上網的Android機相當於一台死機,所以建議你定一個適合自己的流量包月服務,並且對流量精打細算,善於發現那些喜歡偷偷跑流量的程序並進行控制,這一點,有不少流量監控的應用可以作為輔助;另一方面,Android不比超長待機的諾基亞,確實耗電,必須省著用,比如GPS和Edge不要一直開著,睡前把手機調到飛行模式等等;等你熟悉了它的性能後,就可以考慮通過設置CPU降頻的方式來省電。

3,自我管理
善用Google和Android,可以自由地分配你自己的時間、行程和工作安排,可以在手機聯系人生日的時候收到備忘提醒,可以獲取最便捷的交通路線和找到附近最物美價廉的餐廳,可以隨手記錄你的想法和拍攝到的畫面,而且不用怕它們丟失,大大提升你的效率;如果你不善用Android的話,它只是台能打電話的游戲機。所以,要真正地發揮Adroid的效能,關鍵還在於自己的修為。

--------------------

我級別低,貼網址的話恐被作為廣告審核,請見諒,不過文中提到的應用都用了全稱,方便LZ搜索。下載的渠道:原裝的電子市場、豌豆莢(李開復的創新工場做的)、還有安卓網論壇和它開發的安卓市場(手機端),裡面的應用來路相對比較正,而且有專人審核,確保沒有惡意植入木馬什麼的,在其他網站下載就要格外小心。

安卓系統快捷鍵的使用小技巧有哪些

1.全屏截圖:當需要截圖的時候,同時按住開機鍵和HOME鍵,這時就會聽到咔嚓一聲,屏幕就被截圖了,當然這只適合簡單快捷的截圖,如果需要某一部分,還是需要第三方軟體的。 2.長按HOME鍵:長按HOME鍵後會顯示最近使用的程序和後台,這時我們通過這里來切換程序,也可以向左滑動直接關閉程序,簡單快捷,還可以看到手機內存的使用情況,清理內存。 3.手機在鎖屏狀態下,如果QQ來消息,或是聽歌曲的時候想進入播放軟體,不用先解鎖手機再進入,可以由上向下滑動任務欄,直接點擊正在運行的軟體,手機自動就會解鎖。 4.音量條件鍵:使用音量鍵將聲音調整最低就會切換為靜音和振動,這樣就可以省去點來點去的麻煩,簡單快捷。 這里只為大家介紹幾個簡單使用的快捷鍵,也是工程師在日常使用中發現的,可能大家在日常使用中,還會發現更多快捷鍵,歡迎大家來分享。

記得採納啊

⑶ 安卓系統使用教程

一,快速查看手機充電情況

方法1:通過待機屏幕查看,眾所周知Android系統設計了自動鎖屏功能,當手機處於一段時間不使用的情況下就會自動熄滅背景燈,如果需要激活的話就需要按下手機的Menu鍵兩次,但是當按下第一次之後會顯示出待機界面,裡面就會顯示目前的手機電池充電情況。

方法2:在Android系統中的AboutPhone選項中的「Status」選項,裡面能夠看到BatteryLevel的選項,這就是當前手機的充電情況顯示。

方法3:通過第三方軟體查看,由於Android系統中並沒有專門的這類軟體,所以如果想要詳細的查看目前手機充電情況的話就是用一款第三方的電池查看軟體吧

二,教你設置輸入密碼不可見

用過某些需要登錄的應用程序的朋友相信都知道在輸入賬戶密碼默認情況下是顯示出來已經輸入的密碼,為了安全起見都不想旁邊的人看到自己的密碼,那麼怎樣才能設置Android手機不可見已經輸入的密碼呢?教你設置輸入密碼不顯示。

關於密碼的設置當然是在SecurityLocation中了,所以我們先在主屏界面上按下Menu菜單鍵,在彈出的進階菜單中選擇最後一項「Settings」;

進入設置菜單後將滾動條向下滑動,找到「SecurityLocation」的分類,點擊進入;

在安全性和位置分類菜單中找到Passwords分類,其中將「Visiblepasswords」選項後面的勾去掉即可。

三,Market下載失敗解決辦法

其實這樣的問題在國外根本不存在,僅僅是在國內的朋友才會遇到這樣的問題,這是因為貌似是國內將Google伺服器屏蔽掉了,因此我們如果需要諸如YOUTUBE這樣的服務時,只能「翻*牆」了。

設置靜態IP的方法就能為各位網友解憂,該方法是Android123獨創,配合了Google最新的服務,經過數十台Android手機均可以正常下載程序。

首先我們依次點選「Settings——wirelesscontrals——WIFISettings——Menu——Adbanced」勾選USEStaticIP這一項,並將DNS1設置為8.8.8.8,DNS2設置為8.8.4.4即可。

沒錯,上面講到的方法正是利用了Google最新的DNS服務,填入之後其他不需要設置即可。

四,Droid鈴聲設置另類方法

我們在其他Android手機設置鈴聲的時候,一般採用的方法都是使用第三方軟體(如TongPicker)設置,這樣的設置方法有些繁瑣,必須在相應的設置箱內啟動該程序才能設置,Android123這次為你帶來了使用自帶鈴聲庫的選擇的方法。

這個方法簡單的來講就是在內置的TF卡中設置相對應的文件夾,該文件夾必須按照規定的名稱設置,否則系統不會認出來。我們可以通過這樣的設置來電鈴聲、簡訊鈴聲、鬧鈴和系統提示音的聲音。

首先我們要在TF卡根目錄中設立一個名為media的文件夾,在該文件夾中設置audio的文件夾,再在audio文件夾中設置其他相應的文件夾。

其中放置簡訊鈴聲的文件夾名稱為notifications,放置鬧鈴鈴聲的文件夾為alarms,放置來電鈴聲的文件夾為ringtones,而系統提示音的文件夾名稱為ui。

當文件夾設置後,將相對應的鈴聲文件放在相應的文件夾中即可。這樣我們在Android系統的設置中就能直接看到這些鈴聲文件並進行選擇了。

五,Android儲存卡文件夾鈴聲不顯示

Android手機設置鈴聲的方法有很多種,不過最常用的就是在SD卡上設置幾個特定名稱的文件夾,然後在文件夾中放置鈴聲文件,然後使用手機自帶的鈴聲設置方法就能查看到SD卡中的鈴聲並選擇了。不少的網友都說這樣的方法並不能正常使用。在放置鈴聲後,卻不能讀取這些鈴聲文件。這是怎麼回事?又該如何解決呢?

其實造成這樣原因有多個,為你分析原因和解決方法。

首先就是鈴聲格式不支持的原因,目前的Android操作系統僅僅支持MP3和WMA格式的音頻。因此其他格式的音頻必須將其轉換為這兩種格式後才能被讀取。

其次就是設置的文件夾名稱錯誤,必須看好了。這里設置的文件夾名稱分別為「notifications」和「ringtones」,保證首字母小寫。

然後就是卡的問題,有些儲存卡有質量問題,儲存的文件會自動丟失。

最後還有手機ROM版本的問題,有些網友自製版本ROM對於SD卡的讀取並沒有經過優化,因此在選擇到鈴聲選擇界面後需要等待一會兒才會在Android系統的鈴聲選擇菜單中出現。

六,Android手機批量刪除聯系人

有時候我們需要進行聯系人的刪除工作,尤其不是全刪,而是由選擇性的刪除聯系人,難道在Android手機中只能進行一個一個的手動刪除嗎?這也太麻煩了,如果多的話沒有半個小時完成不了的。有什麼簡便的方法嗎?

有,目前刪除聯系人有兩種方法,第一種就是上面說的那樣在手機上一個一個刪除,另外一種就是利用Android手機綁定的Gmail賬號會同步聯系人到手機上,相反的Android手機上的聯系人也可以選擇同步到Gmail賬號的聯系人中。因此我們可以利用第二種方法進行快速的批量刪除聯系人操作。

具體操作步驟如下:在PC上進入Android手機上綁定的Gmail郵箱,在其中的聯系人中進行刪除聯系人操作,刪除完成後,再在手機上進行聯系人同步即可。

七,Android手機WIFI連接上卻不能上網問題

有些是用Android手機的用戶會遇到這樣的問題,當手機進行WIFI無線網路連接時,可以正常的連接上無線網路,而且信號非常好,但是卻在使用某些需要網路支持的軟體(比如Browser或Market)時卻不能正常使用,存在較大的延遲。這是怎麼回事呢?

首先我們按照慣例的分析造成這樣的原因,造成這個症狀的肯定不是因為密碼錯誤,因為它可以連接上網,但是卻有著很大的延遲。因此應該是WIFI的設置除了問題。

那麼我們就進入Android手機中查看WIFI設置,發現沒有什麼可以進行設置的選項,因此應該就是無限路由器的設置問題。進入無線路由器設置,發現無線模式設置為混合模式,而目前生產的Android手機內置的WIFI模塊是支持混合模式的,但是可能由於網路標准之間的切換出現問題,那麼將無線路由器設置成為802.11g即可,當然802.11b也是可以的,只是速度稍慢。自此,WIFI連接上卻不能上網問題圓滿解決。

八,Android手機恢復出廠設置

作為一款智能操作系統,Android也內置了許多其他智能操作系統共有的功能,比如每部手機都必備的恢復出廠設置。那麼Android手機該如何設置,才能讓它正確的恢復出廠設置呢?

首先我們要明確的一點是恢復出廠設置這個功能並不是經常使用的,因為如果誤操作引起的後果是非常嚴重的,恢復出廠設置從字面上就可以理解,手機中的所有設置將恢復到出廠狀態,包括安裝在手機上的軟體、存儲的聯系人、接收的信息和Gmail,綁定的Gmail賬號都將消失,完成後再次開機就會像剛首次開機一樣需要初始化設置,綁定Gmail賬號。因此這是手機遇到不可恢復的錯誤時才使用的功能,那麼該如何操作呢?

這有兩種方法,下面講解第一種,首先進入手機的設置(Settings)中,選擇SD卡和手機儲存(SDCardphonestorage),再選擇最後一項重設出廠數據(Factorydatareset)即可。

第二種方法是在Recovery模式下選擇Wipedate即可,只要在啟動時同時按下主頁鍵和掛機鍵即可進入Recovery模式。

九,在桌面顯示農歷日期

作為一個中國人,我們在逢年過節都都會參照一下古代人發明的農歷,不僅僅是因為它可以看出節氣,也許這就是我們中國人的傳統。那麼使用Android手機可以在桌面上顯示農歷嗎?

可以的。你們還記的Google提供的一個組件就叫做日歷的,在PC***問Gmail和iGoogle都可以看到這款組件,另一方面Android手機與Google的各項服務都息息相關,當然這個日歷組件也不例外,它可以同步用戶的各項日程和記事,當Android手機打開WIFI後,會自動進行同步。另外手機上的日歷可以在桌面上添加Widget,但是要經過一定的設置才能在桌面上顯示農歷信息。設置方法如下:

進入Android桌面的日歷Widget,按下Menu鍵選擇最後一項More,點擊「Mycalendars」,再將農歷選項勾選即可。

十,Android手機電池詳細信息查看

在使用手機的過程中也許你會覺得電池的待機時間越來越短,難道是手機電池老化了嗎?那麼可以查看手機正在使用的電池信息嗎?如果你使用的是智能手機,那麼就可以實現,不過都是通過安裝某些第三方電池測試軟體來達到目的,如果你使用的是Android操作系統手機就不用這么麻煩了,因為手機已經自帶了電池信息的查看,那麼該怎樣查看呢?

其實查看方法非常簡單,直接進入Android的工程模式即可,操作步驟如下:

首先進入操作系統的撥號「Dialer」界面,輸入「*#*#4636#*#*」(不加引號)即可快速進入Android的工程測試模式。在「Testing」菜單中有「Phoneinformation」、「Batteryinformation」、「Batteryhistory」、「Usagestatistics」四個選項,點擊第二項「Batteryinformation」進入,然後既可以看到手機電池的詳細信息了,其中包括電量等級、電池狀態、溫度、電池材質、電壓等等信息

十一,怎樣修改桌面文件夾的名稱?

Android操作系統的桌面功能非常強大,不但可以防止程序的快捷方式,也可以放置各種Widget桌面組件,比如系統桌面的音樂播放器和模擬鍾表等都算是Widget的一種,另外除了上述的那些組件,桌面上還能防止文件夾和聯系人選項,這樣將更為方便的管理系統各項程序快捷方式的分類和使用。就像是在PC上使用桌面文件夾一樣簡單。那麼這個Android系統桌面文件夾可以像PC那樣更改名稱嗎?

當然可以,而且更改起來非常方便。下面是具體操作步驟:

首先在桌面的空白處長按,在彈出的新建窗口中選擇folder選項,再在進階菜單中選擇新建文件夾即可,點擊桌面上的新文件夾,打開後按住文件夾的標題欄,即可出現重命名對話框,寫入重命名並保存即可。

十二,怎樣查看程序的歷史運行時間?

Android操作系統是強大的,由於開源的性質因此沒有什麼好隱藏的,當然Android手機中的各種數據都是可以看到的,但是有些數據在正常模式下是看不到的,必須進入工程測試模式下查看。那麼怎樣才能進入系統的工程模式呢?

其實非常簡單,不用同時按下什麼組合按鍵,而是在撥號界面進行撥號即可。點擊位於系統主屏的Dialer進入撥號界面,輸入「*#*#4636#*#*」(不加引號)即可進入工程測試模式。這時可以看到出現了Testing的界面,包含了Phoneinformation、Batteryinformation、Batteryhistory、Usagestatistics四個選項,如下圖,如果需要查看程序的歷史運行時間,直接點擊最後一項Usagestatistics即可進入其分類,將上方的Sortby選擇為UsageTime即可。下方列出的列表信息就是各個程序的歷史運行時間。

十三,Android系統通用技巧合集

作為一款智能操作系統,快捷鍵和技巧是必不可少的,之前本站也已經介紹過多個Android操作系統使用技巧。

1.首先就是最常用的技巧之一,長按Home鍵可以調出最近使用的6個程序,並將當前程序置入後台運行

2.調整音量至最低,就會依次進入振動模式和電話鈴聲靜音

3.長按掛機鍵,在彈出的進階菜單中可以選擇飛行模式、靜音模式和關機,但是值得一提的是,這里的靜音室完全靜音,音樂盒游戲都沒有聲音。

4.輸入英文時,刪除一個詞就可以同時按下Menu鍵和Del鍵,這樣的操作並不是只刪除一個字母。

5.在簡訊菜單中,長按某條簡訊會調出進階菜單,選擇相應的選項即可將此簡訊轉發或回復。

6.長按接聽鍵,會自動激活系統的語音撥號功能,但是需要注意的是這里的語音僅能識別英文,即使刷了中文操作系統也不行。

7.在SDcard里建立諸"Ringtones""Alarms""Notifications"等文件夾,再將將鈴聲文件(ogg,mp3,wav,mid等)放進去,系統選擇鈴聲的選項中就多出了這些音樂文件。

十四,Android手機WIFI問題集合

現在市面上的Android手機基本都是海外發行,因此都帶有WIFI功能,非常方便,另外由於Android系統的依靠於網路才能發揮其方便快捷的特點,因此WIFI也是其不可分割的一部分。那麼該如何設置呢?

首先在系統主屏界面下按下Menu鍵,選擇最後一項Settings(設置),依次進入Wirelesscontrols(無線控制)——Wi-Fisettings(WIFI設置),將Wi-Fi勾選,再將Networknotification(網路提示)打開,系統會自動進入搜索網路狀態,稍等片刻搜索完畢點擊可用網路,如果有密碼,輸入密碼點擊連接即可。

在WIFI日常的使用中會經常遇到一些問題,比如已連接卻不能上網等,這些很有可能是因為其他的一些原因導致,大致可以分為兩類,一類是程序設置問題,基本存在與密碼不對等情況。另一位是硬體問題,很可能是因為路由器固件較老不能很好的發送信號等,用戶可以根據自身情況逐一排除。

十五,插入TF卡時顯示FormatSDcard怎麼辦?

當插入新買的TF卡時會顯示「FormatSDcard(格式化SD卡)?」的提示出現,那麼該怎麼解決呢?

其實這是在Android1.5之後的系統版本中才會出現的功能,就像將新SD卡插在安裝有Windows操作系統的電腦中,會提示需要格式化一次一樣,只需要將TF卡按照提示格式化即可,當然,這只是全新卡的做法。如果卡中有重要資料,請先在電腦上備份後在在Android手機上進行格式化。

當選擇OK時,會彈出「?Alldataonyourcardwillbelost」的提示,意為「您確定格式化SD卡,所有卡上的數據將會丟失」,單擊Format(格式化)即可進行格式化操作,Android手機會自動在格式化完成後建立系統默認文件夾。

十六,提高Android手機GPS搜星速度方法

目前使用的T-MobileG1、HTCMagic手機中使用的GPS晶元均為SIRF提供的star第三代導航模塊,不過在冷啟動搜星速度方面表現的較一般在戶外需要30~50秒左右的時間。提供搜星速度成了一個重要的話題,從Android1.5固件開始加入了A-GPS輔助定位功能,可以縮短這一時間僅為10秒左右。但需要GPRS流量輔助。

A-GPS的原理主要是通過伺服器位置信息輔助方式提高GPS搜索衛星的速度,但是需要花費GPRS流量在5KB-10KB左右

⑷ Android手機使用技巧

作為一款智能操作系統,快捷鍵和技巧是必不可少的,下面我就告訴你一些Android操作系統使用技巧。
記得採納啊

⑸ Android系統有哪些實用小技巧

1ROOT了卸載不需要的系統自帶的軟體
2安裝LBE控制各種軟體的許可權

⑹ android系統有哪些開發者小技巧

下面是開始Android編程的好方法:
找一些與你想做事情類似的代碼
調整它,嘗試讓它做你像做的事情
經歷問題
使用StackOverflow解決問題
對每個你像添加的特徵重復上述過程。這種方法能夠激勵你,因為你在保持不斷迭代,不經意中你學到了很多。然而,當你發布應用時你還要做一些更深入的事情。
從一些可正常工作的代碼到一個可怕的應用程序是一個巨大的跳躍,相比iOS平台Android更是如此 。當在iOS上發布應用時只是在一個設備上跳躍–你的手機–對很多設備而言都很相似–同樣大小的屏幕,都有很好的硬體,95%上運行相同版本的操作系統。在Android應用中你不會遇到這種情況。
你的程序必須能夠處理一切:從屏幕,處理器,定製的操作系統,API層級以及任何其他的特定設備。
這是我對使Android應用舒服起來的個人建議。
目標屏幕尺寸及解決方法
在Android世界裡目前有超過100種的不同屏幕尺寸,但解決方法也很豐富。為使你的應用適應不同的屏幕配置有兩件事情你需要確定:
你對不同的屏幕尺寸有一個好的布局和結構
你的圖像在不同解析度下工作良好
這些都是獨立的任務,你可能有一個超級的tablet布局,但上面的圖形看起來很糟糕。我們會依次討論他們。
為不同的屏幕而設計
1.通常會用ScrollView 和 ListView 輕松搞定
當我們有一系列不同尺寸的大屏手機時,它們之間最大的不同就是屏幕的高度。因此ScrollView和ListView通常可是有效的工作,雖然有時它們並不能完全覆蓋全部屏幕。在OpenSignal中的Dashboard標簽下我們可以看到所有部件一氣呵成,不存在滑動、對於許多高級類型標簽中,滑動展示並不見得是一件壞事。如果你能夠為你所有的設計匹配到各種屏幕上面去,那麼最好不過。否則,這兩個控制項會讓你用最小的開發代價來保證你的軟體在大多數屏幕上正常展示。

Dashboard style 的設計不需要scroll
2: 使用文件夾. Android 的資源文件夾結構非常強大, 它允許開發者將不同的圖片、字元串、布局文件、外形、顏色這些資源,在api、代碼、屏幕尺寸等部分. 下面是一個例子,展示了在資源文件夾下你可以怎樣做:

在 values-small 文件夾中存放了一個 bools.xml 文件, 文件中有如下幾行代碼:

<resources>
<bool name="small_screen">true</bool>
</resources>

在代碼中我可這樣引用:

if(getResources().getBoolean(R.bool.small_screen)){
getSupportActionBar().hide();
}

在小尺寸設備中boolean值將置為true 我此時將因此ActionBar來節省空間. 這段代碼正是非凡的ActionBarSherlock 擴展庫中的一部分,稍後再詳細介紹. 在values-sw360dp文件夾中,存放對應屏幕寬於360dp的資源文件。與上面相同的位置,有如下代碼
<resources>
<bool name="small_screen">false</bool>
</resources>

對於大屏幕而言,ActionBar就置為了顯示狀態.
我不需要將 bools.xml 文件放入 values-sw400dp文件夾中, 因為操作系統會自動按相應路徑搜索. 例如一個設備寬 600dp (600/160=3.75 英寸, 這就是我們通常所說的7片裝) 操作系統會在values-sw600dp 和其包含的的文件夾中搜索 bools.xml 文件, 若沒有找到則搜索 values-sw400dp 文件夾,在搜索 values-sw360dp 文件夾以此類推.
建議3:160dp = 1英寸。320 dp = 2英寸。dp = dip
建議4:你可以用這些目錄結構技巧來應付所有資源類型,比如你的XML布局用指定的系統目錄名稱
來解決這個問題,如:layout-sw360dp目錄可以匹配目標寬是360dp的機器。如果你也要支持橫豎屏布局切換的話,可以用如下目錄:
layout-sw360dp-land
layout-sw360dp-port
別急,你有一半的用戶是說阿拉伯語的?那就將布局名稱改為下面的樣子吧:
layout-sw360dp-land
layout-sw360dp-port
layout-sw360dp-land-ar
layout-sw360dp-port-ar
前兩個可以適用於所有語言,-ar代表阿拉伯語。
建議5:資源規則簡介:
XXX //例子:沒有添加目錄名:默認-適用於Nexus One,Droid 2,S2
XXX-sw360dp // 比較大的手機 – Galaxy Nexus, S3, S4
XXX-sw600dp // 7〃 平板
XXX-sw720dp // 10” 平板
在Kindle設備有些不同,如下:
XXX-large-mdpi // kindle fire 7〃
XXX-large-hdpi // kindle fire 7〃 HD
建議6:如果你不想裁剪所有的布局文件,你可以用dimens.xml文件。你要是留心我上面的文章,你就會注意到在我的values目錄里有很多dimens.xml,這樣是因為我更喜歡在一個layout.xml里設置值,在每一個布局文件里我喜歡這樣做:

<ImageView
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/small_margin"
android:layout_width="@dimen/dashBoardWidth"
android:layout_height="@dimen/dashBoardHeight"
android:id="@+id/dashboard"/>

small_margin是在dimen.xml文件里定義的:

<resources>

<dimen name="small_margin">4dp</dimen>
</resources>

這個4dp變數在所有dimen文件里。我有個Excel文件,裡面創建了所有不同的基於不同因素所需的尺寸定義。也許你會問:為什麼不讓android OS來處理所有尺寸的問題?為什麼不呢,為什麼不用一個values目錄和一個布局目錄來代替所有寫死的數值呢?那當然是可以的,如果設置得當,都會得到所有的尺寸,但是對於有些元素看起來就不是那麼好計算尺寸了。
建議7:讓空白空間大於圖像空間。讓圖像空間大於按鈕的大小。如果將按鈕,多選框,切換控制項放大後是很醜陋的。一個100dip(0.63")大小的按鈕是不想在平板上顯示為原來兩倍寬度200dip(1.25")的.原因是屏幕變大了,這不是說平板是給巨人用的。我們可以這樣做,在按鈕增加的空間和圖片擴展的空間里添加空白。
建議8:用GraphicalLayout工具快速預覽。GraphicalLayout是WYSIWG XML編輯器。我喜歡直接編寫元素-而不是拖,丟棄的可見編程方式,但在添加一些元素之後,可以在GraphicalLayout的下拉選擇菜單里選擇不同屏幕尺寸進行測試。

這里有很多選項供你選擇。
圖片縮放
建議9:不要把所有的圖片都縮放了。用布局文件來適應不同屏幕尺寸的方法只是成功的一半,布局裡的元素(如:圖片)也要能在高解析度的屏幕下良好工作。在概念上比較簡單的方式就是創建一套完整的圖片目錄並將它們與很多drawable目錄匹配起來。
drawable-sw600dp-ldpi
drawable-sw600dp-mdpi
drawable-sw600dp-hdpi
drawable-sw600dp-xhdpi
drawable-sw600dp-xxhdpi
...其它的類似。
不要這樣做:
你不要太盡信書了。
一般來說有drawble-ldpi, drawable-hdpi等目錄就足夠了,不需要將所有的情況都加上。
建議10:避免使用點陣圖(jpg,png)。對於一些圖標來說,用點陣圖是個不錯的選擇,因為它們使用簡單。但是如果可以避免使用點陣圖,你可以節省很多空間。但用不同的方法也可以達到很好的結果。
建議11:用XML繪圖。點陣圖都可以用XML繪圖來代替的。XML繪圖不是萬能的,但是它的方便性還是使我感到驚訝。Android開發文檔中有詳細的介紹,這里有個簡單的例子:

這里是定義了一個圓角矩形,一個有漸變的邊(深藍)。你可以在布局文件的任何地方來引用,而且它可以適應於任何屏幕。用它可以做出理想的按鈕。
建議12:用更多的XML繪圖。再來介紹一個用XML繪圖製作出能更加讓你興奮的例子,下面的雷達背景看起來是不是更加的復雜:

不用點陣圖對你的UI是沒有壞處的(除過圖標)。
建議13:仍然用更多的XML繪圖(如果必須,就用點陣圖)。那我們怎樣為天氣信號構建一個超酷的圖標-讓燈泡動態的依據光的強度來進行自動填充,以及怎麼點擊指針後讓其旋轉呢?這里我們用點陣圖和XML結合起來做個例子:

燈泡我們用PNG圖:icon_magnitude_min(一個空的燈泡)和icon_magnitude_max(充滿光的燈泡),然後我們動態的裁剪後者。為了實現這個目標我是這樣做的:

java程序中我將得到回形針的引用,然後可以用它來控制光的強度。
建議14: 為什麼要用9-patch (當你可以用XML drawables的時候)? Android具有使用9-patches 來定義drawables的選擇,有些教程闡述了怎樣用它們來做一個按鈕,這樣可以在伸展的時候保持幾個角不變 (並且避免了像素處理)。如果你已經知道怎樣使用9-patches,可能是從web設計中學會的,那麼它們或許值得一用。如果你對9-patches並不熟悉,我建議你維持原樣。如果你想適應什麼東西——例如拐角的圓弧或者顏色,創建9個小塊要比創建點陣圖更多被涉及,這就像回到了圖像編輯器的時代。許多用9-patches獲得的效果也可以通過XML獲得。
建議15: 通過覆蓋onDraw()創建自定義views. 有些事情XML並不十分在行,我們在OpenSignal和WeatherSignal中畫過許多圖像,為此有許多的庫,但是我們要為自定義圖像自己編寫代碼。這很有趣。或許你永遠也不需要做這個,但為了使圖像高度動態並自定義,這經常是唯一可行的辦法。
建議16:在不能使用XML的地方使用SVG. 有時候覆蓋onDraw()並勤勤懇懇的為自定義view編寫代碼畫出需要的線條與弧線是過於技術化了。畢竟有一種矢量圖像語言,它稱作…Scalable Vector Graphics(可擴展矢量圖形)。它也是史上最酷的Android應用之一—Androidify的動力來源。事實上他們創建這個庫就是為了那款應用,他們將它發布在這里:SVG for Android 。這也就是我們在OpenSignal中畫儀表盤所用到的。
建議17: 對SVG文件GZip壓縮. 將它們變得更小它們就會處理的更快。
建議18: SVG庫並不是支持一切. 在一些特定的alpha通道中似乎不能正常工作,你甚至不得不在代碼中將它們剔除。
達到在android所有版本里表示展現一致的目標
建議19:在一些android系統里(如TouchWhizz/HTC Sense/MotoBlur等等),默認的buttons和其他UI組件會跟原生系統里的看起來差別很大。我希望這不是真的,但事實卻是如此。
建議20:自定義你的UI組件。為了確定你的app在所有的設備里看起來是一致的,你將需要自定義所有的東西。這其實沒有你想像中那麼難,只要你做到了,你將能更加好地把握到你的app的展示外觀。
建議21:Selectors是創建buttons的利器。我們在上面提到了如何在XML里定義button的背景,但是你將如何創建一個當按下去會改變的button呢?很簡單:像下面那樣在xml文件里定義背景。該xml文件將接收到button當前狀態並且在外觀上做出相應的改變。

建議22:在Honeycomb之前的版本里時不存在ActionBar跟很多 animation 樣式的,所以可以使用ActionBarSherlock 跟NineOldAndroids來代替。Jake Wharton寫的Android開源 組件都是往下兼容的精心傑作。更為驚喜的是,ABS 擁有強大的功能用來定義ActionBar。
把速度作為目標
建議23:在運行慢的手機上測試。你將在運行慢的手機上發現很多問題,同時它讓你抓狂,沒人會喜歡運行慢的程序。
建議24:盡量減少XML布局層次。更多的層次意味著系統將為解析你的代碼付出更多的工作,這將會讓圖像渲染的更慢。
建議25:用Android Lint。在工程目錄上右鍵選擇Eclipse>Android Tools>Run Lint。它將會得到程序的一些信息,並能提高程序的運行速度,或者它能讓你得代碼更加清爽。
建議26:Android Lint可以得到錯誤信息。它可以給你的代碼提供很詳細的信息,並在你出錯之前就可以給做出提示。
建議27:用<merge>可以幫助你減少視圖層次結構。這是一種簡單的方式來去除多餘的層次。好的文章都對此有所解釋,而且在 Android Developer中它也顯得與眾不同。
建議28:用HierarchyViewer可以直觀的看到你布局的層次。這個智能的工具可以顯示布局中有多少層次,而且可以提示出那些可以讓程序變慢。
建議29:如果可以盡量用RelativeLayout。AbsoluteLayout已經過期了,就不要用了。你經常會遇到在RelativeLayout和LinearLayout中做出選擇的情況,那就直接用RelativeLayouot吧,因為它可以讓你減少視圖層次。比如,你想實現一個如下視圖:
盒子 A 在屏幕左半邊 |盒子 B在屏幕右半邊
你首先會想到這么做:
<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:orientation=”horizontal”
>
<TextView
android:text=”Box A takes up left half of the screen”
android:layout_width=”0dip”
android:layout_height=”wrap_content”
android:layout_weight=”1″
/>
<TextView
android:text=”Box B takes up left half of the screen”
android:layout_width=”0dip”
android:layout_height=”wrap_content”
android:layout_weight=”1″
/>
</LinearLayout>
That works just fine, but you could also use:
<RelativeLayout
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:orientation=”horizontal”
>
<TextView
android:text=”Box A takes up left half of the screen”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:layout_toLeftOf=”@+id/mmy_center”
/>
<View
android:id=”@+id/mmy_center”
android:layout_width=”0dip”
android:layout_height=”0dip”
android:layout_gravity=”center”
/>
<TextView
android:text=”Box B takes up left half of the screen”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:layout_toRightOf=”@+id/mmy_center”
/>
</RelativeLayout>

第二個表單比第一個難看的多,事實上是相當的糟糕:我們已經介紹過一個完整的新元素了。但是假如我們要給每個盒子里加入一個圖片,一般的我們將這樣做:
盒子 A 在屏幕左半邊 圖片|盒子 B在屏幕右半邊 圖片
用第一中方法,你得創建一個有兩個層次的LinearLayout,如果用第二種方法,你可以直接在同一個RelativeLayout中加入圖片,比如要指定第一個圖片必須在“mmy_center”的左邊,而且一個TextView A必須也在其左側。那麼你就得用7個元素3個視圖層次了(LinearLayout 方式),而(RelativeLayout方式)只用6個元素2個層次,這樣所有的工作添加完成。
建議30:用一些擴展工具如DDMS。這可以幫助你發現一些不必要的網路調用、查看電池使用量、垃圾回收信息,狀態變化(例子:當回調onStop和onDestroy時)等。LittleEye是我目前比較喜歡的工具。
建議31:用AsyncTasks。Anroid工程團隊受夠了人們經常在UI線程裡面實現網路調用(譯註:耗時操作,容易阻塞UI刷新),所以他們實現了一些可產生編譯級錯誤信息的API。但是仍然在很多app中的一些工作會拖垮UI線程,我們要考慮到UI布局要快以及提高UI的響應性。
目標機器空間小
建議32:一些Aandroid設備有100mb空間大小的限制。現在情況已有變化了,但是仍然有很多用戶還會擔心5Mb大小的app會浪費空間。如果你可以選擇將app裝入SD卡的話,這就不是問題了,但如果你的app需要在onBoot里啟動的話你就不能裝入SD卡了(例子:如一些窗體小部件).甚至對於一些新的設備,如果能很快的下載一個小的APK的話,用戶還是很高興的。
建議33:用XML資源(我發誓上次我已經提醒過了),這將比PNG資源節省很多空間,當你僅僅需要一個可以滿足很多屏幕大小的配置時,一個XML文件會比能實現同樣功能的PNG省空間。
建議34:如果要用PNG,最好優化一下(用PNGCrush或ImageOptim)

目標bugs
建議35:在Android開發者控制台里檢查所有被自動檢測出來的bugs.
建議36: ProGuard現在是默認啟動著的. Proguard太好用了 (提高你app的速度和降低文件大小),但這也讓StackTraces 非常難以處理。你將需要重新追蹤你的StackTraces,因此你將需要繼續保留在每次構建中創建的Proguard的映射文件。我把它們都放到以代碼版本號命名的文件夾里。
建議37: 為了顯示StackTraces里的行數,你需要修改ProGuard的配置。確認你的proguard.cfg擁有下面這句話:
-keepattributes SourceFile,LineNumberTable
建議38:使用staged rollouts。測試5%的基礎用戶,並且觀察bug報告。
建議39:使用真實設備測試平台。Device Anywhere and Perfecto Mobile提供了虛擬測試平台,在那裡,你可以使用真正的移動設備。我發現他們有一些笨拙,加入連續不斷地進行測試的話,會導致有一些糟糕的情況。如果你在聯合辦公的環境里工作,或者有一些Android開發的好友,那麼去啟動一個“設備池”吧。
建議40: 多寫代碼少寫博客。其實不是的, 分享就是關愛, 我只是想不出第40條寫什麼是了。

⑺ 求安卓系統的資料以及常用技巧

  • http://wenku..com/view/ad9f1ef19e314332396893f0.html

  • http://wenku..com/search?word=%D7%BF%CF%B5%CD%B3%B5%C4%D7%CA%C1%CF%D2%D4%BC%B0%B3%A3%D3%C3%BC%BC%C7%C9&lm=0&od=0&fr=top_home

⑻ Android上有哪些不為人知的技巧 福利貼②

一、【如何找出安卓手機所連接過的WiFi密碼】
第一步:安裝「RE管理器」;
第二步:打開RE管理器,進入data/misc/wifi;
第三步:找到bcm_supp.conf或wpa_supplicant.conf文件並打開;
第四步:保存過的WIFI賬號和密碼一目瞭然了。ssid=後面是WIFI網路名,psk=就是相應的密碼。

二、極度充分利用手機內存
1.利用鈦備份清理。
進入鈦備份文件(必須為專業版。)
准備就緒後點擊手機左鍵,然後找到清理dalvik(無用的虛擬內存),如果有,選擇清理。
2.利用鈦備份整合dalvik進系統。
重復上面操作。找到整合dalvik進系統。
如果有可以整合的,保證系統內存足夠!
一般來說,沒有用過此功能的第一次可以空出許多手機內存!
3.利用鈦備份轉移軟體進系統。
打開鈦備份,找到想要轉移的軟體(盡量不要轉游戲),然後往左輕輕一劃,會出現相關頁面。再點擊轉換為系統文件既可

推薦用鈦備份6.0.2.1專業版
(6.03專業版有bug,不推薦使用)

三、手動轉移軟體進系統。
先將軟體安裝至手機!
然後在data/app找到軟體,移動至system/app文件夾,修改許可權未三讀一寫!即:
√√


第三行不要打勾!
移動完成後,長按軟體,選擇查看。
找到軟體裡面的lib文件夾,並且全部解壓。再將裡面帶.so的文件移動至system/lib文件夾,不需要修改許可權。
重啟既可!

四、清理無用文件!
這個最實用!
用re管理器進入data文件夾。找到以下子文件:
dalvik-cache
local
log
lost+found
tombstones
把裡面的文件全部刪除!
沒錯,全部刪除!
之後你會發現你的手機完蛋了,不用擔心,立刻重啟。然後等十幾分鍾完美解決。手機內存多了好多有木有!

五、手機提示「SD卡已損壞,可能需要重新格式化卡」 的解決辦法!!!
1.拔下手機上的SD卡,插入讀卡器,插入電腦USB介面,電腦上顯示出可移動磁碟。
2.打開 開始-運行-CMD。
3.在CMD里運行「chkdsk /f h:」(h是我SD卡的盤符,你的如果是f盤,就寫f)。
4.按回車鍵,就開始修復(過程可能要幾分鍾)。
5.修復後,右鍵SD卡屬性-工具-開始檢查-把「自動修復文件系統錯誤」和掃描並嘗試恢復壞扇區」兩項都打上「?」。
6.把SD卡插回手機,你就會發現該問題已經成功解決了。

⑼ 有哪些android開發技巧

1、android:clipToPadding

意思是控制項的繪制區域是否在padding裡面。默認為true。如果你設置了此屬性值為false,就能實現一個在布局上事半功陪的效果。先看一個效果圖。

上圖中的ListView頂部默認有一個間距,向上滑動後,間距消失,如下圖所示。

如果使用margin或padding,都不能實現這個效果。加一個headerView又顯得大材小用,而且過於麻煩。此處的clipToPadding配合paddingTop效果就剛剛好。

同樣,還有另外一個屬性也很神奇:android:clipChildren,具體請參考:【Android】神奇的android:clipChildren屬性

2、match_parent和wrap_content

按理說這兩個屬性一目瞭然,一個是填充布局空間適應父控制項,一個是適應自身內容大小。但如果在列表如ListView中,用錯了問題就大了。ListView中的getView方法需要計算列表條目,那就必然需要確定ListView的高度,onMesure才能做測量。如果指定了wrap_content,就等於告訴系統,如果我有一萬個條目,你都幫我計算顯示出來,然後系統按照你的要求就new了一萬個對象出來。那你不悲劇了?先看一個圖。

假設現在ListView有8條數據,match_parent需要new出7個對象,而wrap_content則需要8個。這里涉及到View的重用,就不多探討了。所以這兩個屬性的設置將決定getView的調用次數。

由此再延伸出另外一個問題:getView被多次調用。

什麼叫多次調用?比如position=0它可能調用了幾次。看似很詭異吧。GridView和ListView都有可能出現,說不定這個禍首就是wrap_content。說到底是View的布局出現了問題。如果嵌套的View過於復雜,解決方案可以是通過代碼測量列表所需要的高度,或者在getView中使用一個小技巧:parent.getChildCount == position

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (parent.getChildCount() == position) {
// does things here
}

return convertView;
}

3、IllegalArgumentException: pointerIndex out of range

出現這個Bug的場景還是很無語的。一開始我用ViewPager + PhotoView(一個開源控制項)顯示圖片,在多點觸控放大縮小時就出現了這個問題。一開始我懷疑是PhotoView的bug,找了半天無果。要命的是不知如何try,老是crash。後來才知道是android遺留下來的bug,源碼里沒對pointer index做檢查。改源碼重新編譯不太可能吧。明知有exception,又不能從根本上解決,如果不讓它crash,那就只能try-catch了。解決辦法是:自定義一個ViewPager並繼承ViewPager。請看以下代碼:

/**
* 自定義封裝android.support.v4.view.ViewPager,重寫onInterceptTouchEvent事件,捕獲系統級別異常
*/
public class CustomViewPager extends ViewPager {

public CustomViewPager(Context context) {
this(context, null);
}

public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
try {
return super.onInterceptTouchEvent(ev);
} catch (IllegalArgumentException e) {
LogUtil.e(e);
} catch ( e) {
LogUtil.e(e);
}
return false;
}
}

把用到ViewPager的布局文件,替換成CustomViewPager就OK了。

4、ListView中item點擊事件無響應

listView的Item點擊事件突然無響應,問題一般是在listView中加入了button、checkbox等控制項後出現的。這個問題是聚焦沖突造成的。在android裡面,點擊屏幕之後,點擊事件會根據你的布局來進行分配的,當你的listView裡面增加了button之後,點擊事件第一優先分配給你listView裡面的button。所以你的點擊Item就失效了,這個時候你就要根據你的需求,是給你的item的最外層layout設置點擊事件,還是給你的某個布局元素添加點擊事件了。

解決辦法:在ListView的根控制項中設置(若根控制項是LinearLayout, 則在LinearLayout中加入以下屬性設置)descendantFocusability屬性。

android:descendantFocusability="blocksDescendants"

官方文檔也是這樣說明。

5、getSupportFragmentManager()和getChildFragmentManager()

有一個需求,Fragment需要嵌套3個Fragment。基本上可以想到用ViewPager實現。開始代碼是這樣寫的:

mViewPager.setAdapter(new CustomizeFragmentPagerAdapter(getActivity().getSupportFragmentManager(), subFragmentList));

導致的問題是嵌套的Fragment有時會莫名其妙不顯示。開始根本不知道問題出現在哪,當你不知道問題的原因時,去解決這個問題顯然比較麻煩。經過一次又一次的尋尋覓覓,終於在stackoverflow上看到了同樣的提問。說是用getChildFragmentManager()就可以了。真是這么神奇!

mViewPager.setAdapter(new CustomizeFragmentPagerAdapter(getChildFragmentManager, subFragmentList));

讓我們看一下這兩個有什麼區別。首先是getSupportFragmentManager(或者getFragmentManager)的說明:

Return the FragmentManager for interacting with fragments associated with this fragment's activity.

然後是getChildFragmentManager:

Return a private FragmentManager for placing and managing Fragments inside of this Fragment.

Basically, the difference is that Fragment's now have their own internal FragmentManager that can handle Fragments. The child FragmentManager is the one that handles Fragments contained within only the Fragment that it was added to. The other FragmentManager is contained within the entire Activity.

已經說得比較明白了。

6、ScrollView嵌套ListView

這樣的設計是不是很奇怪?兩個同樣會滾動的View居然放到了一起,而且還是嵌套的關系。曾經有一個這樣的需求:界面一共有4個區域部分,分別是公司基本信息(logo、名稱、法人、地址)、公司簡介、公司榮譽、公司口碑列表。每部分內容都需要根據內容自適應高度,不能寫死。鄙人首先想到的也是外部用一個ScrollView包圍起來。然後把這4部分分別用4個自定義控制項封裝起來。基本信息和公司簡介比較簡單,榮譽需要用到RecyclerView和TextView的組合,RecyclerView(當然,用GridView也可以,3列多行的顯示)存放榮譽圖片,TextView顯示榮譽名稱。最後一部分口碑列表當然是ListView了。這時候,問題就出來了。需要解決ListView放到ScrollView中的滑動問題和RecyclerView的顯示問題(如果RecyclerView的高度沒法計算,你是看不到內容的)。

當然,網上已經有類似的提問和解決方案了。

給一個網址:

四種方案解決ScrollView嵌套ListView問題

ListView的情況還比較好解決,優雅的做法無非寫一個類繼承ListView,然後重寫onMeasure方法。

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}

ListView可以重寫onMeasure解決,RecyclerView重寫這個方法是行不通的。

說到底其實計算高度嘛。有兩種方式,一種是動態計算RecycleView,然後設置setLayoutParams;另外一種跟ListView的解決方式類似,定義一個類繼承LinearLayoutManager或GridLayoutManager(注意:可不是繼承RecyclerView),重寫onMeasure方法(此方法比較麻煩,此處不表,下次寫一篇文章再作介紹)。

動態計算高度如下:

int heightPx = DensityUtil.dip2px(getActivity(), (imageHeight + imageRowHeight) * lines);
MarginLayoutParams mParams = new MarginLayoutParams(LayoutParams.MATCH_PARENT, heightPx);
mParams.setMargins(0, 0, 0, 0);
LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(mParams);
honorImageRecyclerView.setLayoutParams(lParams);

思路是這樣的:服務端返回榮譽圖片後,由於是3列顯示的方式,只需要計算需要顯示幾行,然後給定行間距和圖片的高度,再設置setLayoutParams就行了。

int lines = (int) Math.ceil(totalImages / 3d);

至此,這個奇怪的需求得到了解決。

可是在滑動的時候,感覺出現卡頓的現象。聰明的你肯定想到是滑動沖突了。應該是ScrollView的滑動干擾到了ListView的滑動。怎麼辦呢?能不能禁掉ScrollView的滑動?

網路一下,你肯定能搜索到答案的。先上代碼:

/**
* @author Leo
*
* Created in 2015-9-12
* 攔截ScrollView滑動事件
*/
public class CustomScrollView extends ScrollView {

private int downY;
private int touchSlop;

public CustomScrollView(Context context) {
this(context, null);
}

public CustomScrollView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}

public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
touchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
}

@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
int action = e.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
downY = (int) e.getRawY();
break;
case MotionEvent.ACTION_MOVE:
int moveY = (int) e.getRawY();
if (Math.abs(moveY - downY) > touchSlop) {
return true;
}
}
return super.onInterceptTouchEvent(e);
}
}

只要理解了getScaledTouchSlop()這個方法就好辦了。這個方法的注釋是:Distance in pixels a touch can wander before we think the user is scrolling。說這是一個距離,表示滑動的時候,手的移動要大於這個距離才開始移動控制項,如果小於此距離就不觸發移動。

看似很完美了。

但是還有另外一個問題:我每次載入這個界面花的時間太長了,每次由其它界面啟動這個界面時,都要卡上1~2秒,而且因手機性能時間不等。並不是由於網路請求,取數據由子線程做,跟UI線程毫無關系。這樣的體驗自己看了都很不爽。

幾天過去了,還是那樣。馬上要給老闆演示了。這樣的體驗要被罵十次呀。

難道跟ScrollView的嵌套有關?

好吧,那我重構代碼。不用ScrollView了。直接用一個ListView,然後add一個headerView存放其它內容。因為控制項封裝得還算好,沒改多少布局就OK了,一運行,流暢順滑,一切迎刃而解!

本來就是這么簡單的問題,為什麼非得用ScrollView嵌套呢?

stackoverflow早就告訴你了,不要這樣嵌套!不要這樣嵌套!不要這樣嵌套!重要的事情說三遍。

ListView inside ScrollView is not scrolling on Android

當然,從android 5.0 Lollipop開始提供了一種新的API支持嵌入滑動,此時,讓像這樣的需求也能很好實現。

此處給一個網址,大家有興趣自行了解,此處不再討論。

Android NestedScrolling 實戰

7、EmojiconTextView的setText(null)

這是開源表情庫com.rockerhieu.emojicon中的TextView加強版。相信很多人用到過這個開源工具包。TextView用setText(null)完全沒問題。但EmojiconTextView setText(null)後就悲劇了,直接crash,顯示的是null pointer。開始我懷疑時這個view沒初始化,但並不是。那就調試一下唄。

@Override
public void setText(CharSequence text, BufferType type) {
SpannableStringBuilder builder = new SpannableStringBuilder(text);
EmojiconHandler.addEmojis(getContext(), builder, mEmojiconSize);
super.setText(builder, type);
}

EmojiconTextView中的setText看來沒什麼問題。點SpannableStringBuilder進去看看,源碼原來是這樣的:

/**
* Create a new SpannableStringBuilder containing a of the
* specified text, including its spans if any.
*/
public SpannableStringBuilder(CharSequence text) {
this(text, 0, text.length());
}

好吧。問題已經找到了,text.length(),不空指針才怪。

text = text == null ? "" : text;
SpannableStringBuilder builder = new SpannableStringBuilder(text);

加一行判斷就行了。


先想到這么多,以後再補充。

熱點內容
國際服如何改伺服器 發布:2025-01-18 11:52:34 瀏覽:325
通文件夾鎖 發布:2025-01-18 11:49:37 瀏覽:3
java測試類 發布:2025-01-18 11:48:58 瀏覽:504
查詢最大sql 發布:2025-01-18 11:43:14 瀏覽:266
網易我的世界伺服器添加第三方mod 發布:2025-01-18 11:32:10 瀏覽:212
oracle批量插入存儲過程 發布:2025-01-18 10:49:57 瀏覽:41
分表存儲查詢 發布:2025-01-18 10:45:18 瀏覽:469
缺頁演算法 發布:2025-01-18 10:40:20 瀏覽:778
撕裂重罪6游戲電腦需要什麼配置 發布:2025-01-18 10:37:23 瀏覽:444
python大小寫忽略 發布:2025-01-18 10:36:13 瀏覽:441