1.1 自定義進度條java
建立自定義的xml文件android
外層根節點是一個rotate無限旋轉的動畫web
內層節點是一個shapejson
屬性圓環ring,內半徑比:innerRadius;外半徑(圓環厚度)thickness,api
在佈局文件progressBar屬性:indeterminateDrawable執行樣式文件瀏覽器
1.2 上拉加載更多緩存
①建立一個腳佈局服務器
②在自定義控件中初始化腳佈局微信
this.addFootView(View)網絡
腳佈局簡單一點,不用那麼多動畫
設置padding 隱藏腳佈局
③實現滑動狀態監聽器,重寫方法
在onScrollStateChanged()滑動狀態發生改變的方法裏
當前若是是空閒狀態scrollState == SCROLL_STATE_IDIE
注意:這裏類雖然實現了回調接口,但仍是須要調用setOnScrollListener(this)方法
當處於空閒狀態的時候,若是當前最後一個可見條目是最後一個getCount()-1
顯示腳佈局
setSelection(getCount()-1)//跳到實際的最後一個條目
額外:須要一個標記,防止用戶重複加載更多
④回調接口中添加一個加載更多的方法,在觸發加載更多的位置加載更多
⑤經過網絡數據中表明加載更多(more)的url,表明下一頁數據的連接
根據實際狀況判斷more是否爲空
若是爲空,就置爲null
在回調方法裏,判斷它是否爲nul,若是爲null提示用戶沒有更多數據了
若是不爲null,建立一個方法,代碼基本上等同於下拉刷新代碼,不過不須要緩存,由於緩存的實際上只須要一頁就夠了
問題1:直接解析數據以後,並非追加,而是覆蓋了第一頁
解決1:解析數據的時候加一個變量,判斷是否須要加載更多
須要加載更多,就把新的新聞列表添加到舊的集合中
細節1:不管有沒有更多數據,都應該隱藏腳佈局
解決2:改造調用加載完畢的方法,調用此方法,就能夠影藏腳佈局
2,標記已讀未讀
2.1 設置ListView點擊事件
注意:這裏的頭佈局是會佔位置的,實際第一個點擊條目位置是:頭佈局個數+0
而集合的位置依然是從0開始
因此position須要修正爲position-頭佈局個數(listView.getHeaderViewCount());
2.2 標記
經過json數據分析,每一條新聞都有一個惟一標示:id
能夠把點擊過的新聞id保存在sp中
經過一個鍵值對判斷是否已經點擊過
read_ids(鍵,任意名):id1,id2,id3(值,用」,」符號拼接)
注意:默認值不能是null,由於在第一次添加後,null+」」>>>>>>>>字符串「null」
問題1:重複添加的可能
解決1:判斷字符串中是否包含(contains)了當前id,若是包含了就不添加
拿到被點擊的文本控件,經過參數View(被點擊的條目)找到文本控件,修改顏色.
(這樣作算是局部刷新,也能夠經過適配器重繪notifyDataSetChanged()全局刷新)
在適配器中要回顯點擊狀態
3,建立新聞詳情頁
當一個頁面與上一個頁面幾乎沒有任何關係(樣式,功能等差距明顯)用Activity
注意:Activity是全屏的,不能作內嵌的控件
參考名:NewsDetailActivity
①佈局文件
標題欄,能夠引入前面的標題欄進行修改
若是是對標題欄進行修改,通常狀況下隱藏掉,在新聞詳情頁中找到並進行顯示
②頁面跳轉
點擊條目以後,mAcitivity.startActivity(intent)//跳轉頁面
③WebView控件使用
在佈局中添加這個控件
在類中找到它
mWebView.loadUrl(url);//加載url,會平鋪整個頁面
mWebView.getSetting()//獲取全部設置功能
setting.setBuiltInZommControls(true)//顯示縮放按鈕
細節1:但願雙擊放大:
解決1:setting.setUseWideViewPort(true);
細節2:WebView默認是禁止js的 javaScript
解決2:setting:.setJavaScriptEnabled(true);
細節3:各類點擊跳轉瀏覽器,用戶體驗很差,但願通常狀況在都在本頁面進行處理
解決3:mWebView.setWebViewClient(new WebViewClient(){//設置web控件監聽
onPageStarted()//頁面開始加載調用
onPageFinished()//網頁加載結束
shouldOverrideUrlLoding()//全部的跳轉連接都會走此方法
經過參數view.loadUrl(url)//在跳轉頁面前,強制在當前頁面加載
return true;//去掉super.xxx
})
加載的時候顯示進度條,在佈局中webView上壓一個進度條,控件監聽方法中限定生命週期.
細節4:但願返回上一頁
解決4:經過按鈕,設置跳轉
mWebView.goBack()//跳到上個頁面
mWebView.goForward()//跳到下個頁面
細節5:但願知道網頁加載進度
解決5:mWebView.setWebChromeClient(new WebChromeClient(){
onProgressChanged()// 參數int,表明進度值
onReceivedTitle()//參數String,表明網頁標題
});
4.WebView使用場景:
須要使用網頁的部分
不少的客戶端都是用WebView進行加載
經過設置>>開發者選項>>顯示佈局邊界,能夠判斷一個app是用的WebView仍是系統原生的控件製做的(Html5很強大,能夠模擬出相似android控件同樣的效果)
實際開發中,網頁由服務器端人員開發的.用WebView加載的.
5,加載新聞頁面,設置字體大小
①加載新聞頁面:經過intent攜帶url過去
加載完了以後發現沒有縮放按鈕和點擊縮放
是由於這是Web網頁,專門針對手機屏幕進行適配的
②設置按鈕點擊事件
返回按鈕:直接finish();關閉當前頁面就是
字體按鈕:彈出一個對話框(alertDialog),讓用戶選擇字體.
AlertDialog.builder builder
builder.setSingleChoiceItems(items,checkedItem.listener);
Items,單選框顯示的文本
checkedItem,默認選中的條目
listener監聽器
而後再設置確認,取消按鈕(取消按鈕的話,能夠不設置監聽器,它會本身取消)
用戶點了肯定以後,根據選擇的字體,修改WebView的字體大小
注意:這裏選中的條目,並非肯定按鈕傳遞的參數,而是設置單選條目監聽回調的參數.
建立一個變量記錄下它(臨時選中的)
最後在確認按鈕中,判斷臨時選中的按鈕,用另外一個變量記錄(確認選中)下它
修改字體大小:setting.setTextSize(TextSize.LARGEST);//枚舉的方式設置,api18後被廢棄
setting.setTextZoom(int )//經過int值設置,api18之後設置
細節1:不該該把默認選中條目寫死,寫成確認選中的變量值(默認2)
細節2:記錄到sp中,選中的字體
6,ShaderSdk的使用,分享到其它平臺(微信,QQ,微博等)
須要註冊,相似百度SDK的使用
幫助文檔有很詳細步驟
應用程序名是指在編譯工具中顯示的名稱(英文字母),不是label中指定的名稱
生成的文件夾直接覆蓋(記得備份一下)
配置清單文件(重複的權限能夠去掉)
開放平臺通常都有本身的SDK支持(微信,微博,QQ等)
修改分享時的樣式.oks.setTheme(OneKeyShareTheme.SKYBLUE);
7,頭條新聞自動輪播
7.1在新聞頁籤詳情頁pager中,建立handler對象
這裏初始化handler在加載完數據以後初始化(記得判斷是否爲空,爲空才發消息,保證自動輪播邏輯只執行一次)
mhandler.sendEmptyMessageDelayed(0,3000)//發送一個延時三秒的消息
在handler中,拿到當前頁面,而後進行++,而後再mViewPager.setCurrentItem(i);
在handler裏面,繼續發一個空消息//造成一個循環
若是currentItem等於最大索引,就讓它歸0
7.2 用戶按住輪播圖的時候,再也不繼續輪播
停下handler消息事件.
mViewPager.setOnTouchListener()//設置觸摸事件
當用戶按下的時候,mHandler.removeCallBacksAndMessage(null);//清空全部消息
mHandler.post(new Runable(){ //另外一種方式,不用重寫handlerMessage方法,在裏面作消息的處理就能夠了.(更新主界面之類)
Run(){} //在主線程中運行
});
當手指擡起的時候,繼續啓動廣告,發送一個一樣的延遲消息
可是當用戶在按下以後(直接滑動ListView,致使擡起事件沒法響應),不走action_up,而是走ACTION_CANCEL.
在這裏面也從新發送一次延遲消息
8,組圖模塊,ListView顯示組圖數據
①實際上佈局的時候,是一個ListView和一個GridView覆蓋
②在對應的組圖pager代碼中找到它
注意連接,與以前的是不同的,再在URL類中增長一個URL
使用xutil訪問網絡,加緩存,度緩存,打印錯誤信息等等
③解析網絡返回的JSON串,建立JAVABean
④ListView item佈局
看起來像一張卡片,設置margin屬性,背景圖片設置
圖片寬高要寫固定,否則佈局會亂,屬性scaleType=」centerCrop」
⑤經過Json串設置ListView適配器(用BitmapUtils加載網絡圖片)
8.2 GridView切換顯示
①在標題欄上繼續增長一個按鈕,切換顯示ListView和GridView
在設置菜單詳情頁的方法中,若是是組圖詳情頁,就顯示切換按鈕,不然就隱藏
控件的傳遞:在建立組圖詳情頁的時候,就把控件傳遞過來
點擊事件,切換顯示ListView和GridView
②GridView的adapter和ListView的Adapter是能夠共用的