校園通訊錄功能,收集校園內的公開****等內容,並進行展示。在日常生活中經常可能需要用到。比如 水電處問題了找水電師傅,招生就業辦,學工辦的**等等。
當然,出於隱私考慮,個人手機號不會被收集展示。只展示辦公室****等可在網上或校園內查到的號碼。校園通訊錄模組旨在打造便捷的校園資訊服務平台,完善校園資訊服務,給校園資訊的管理和維護提供更便捷、更安全的服務系統。
(本文對該模組進行簡易實現,僅講述通訊錄列表樣式的展示)
系列文章
校園通訊錄:
校園通訊錄資料部分比較簡單,總共 姓名稱呼,部門,**** 3個主要字段即可;
通訊錄列表的資料需要排序分組後再顯示;
排序:右側顯示字母快速索引列表,並關聯 recycleview ,可以關聯滑動按照姓名稱呼的首字母拼音排序
==> 需要獲取首字的拼音
==> 通過三方庫 tinypinyin 來實現
分組:
可以通過自定義 recycleview 的 itemdecoration 來實現,需要額外處理懸浮窗的顯示情況
通過自定義控制項來實現文章:
欄位名描述
型別是否主鍵
objectid
唯一標識
string
是name
姓名稱呼
string
-department
部門string
-tel
****
string
-下面介紹下校園通訊錄模組實現的主要思路:
step 1: 資料排序
依賴 tinypinyin 庫後,對源資料進行加工處理,增加設定 indextag 字段內容。然後依據該欄位進行排序;
public
static
void
sortdata
(list
list)
else
} collections.
sort
(list,
newcomparator
()elseif(
"#".
equals
(o2.
getindextag()
))else}}
);
step 2: 資料分組
資料排序完成後,通過自定義 itemdecoration 來繪製懸浮框及 itemview 之上的分類tag
//用來繪製每個itemview的邊距
@override
public
void
getitemoffsets
(rect outrect,
view view,
recyclerview parent,
recyclerview.state state)
else
if(position >0)
}}//用來繪製最上面的懸浮框
@override
public
void
ondrawover
(canvas canvas,
recyclerview parent,
recyclerview.state state)
//按需繪製itemview上面的分類tag
@override
public
void
ondraw
(canvas canvas,
recyclerview parent,
recyclerview.state state)
else
if(position >0)}}}
step 3: 自定義右側索引view@override
protected
void
ondraw
(canvas canvas)
}
在ontouchevent處理了滑動事件,當手指上下滑動時左側有個圓跟著滑動,這裡用的自定義indexbar( indexbar extends viewgroup,indexbar包含sidebar )來處理的,當sidebar滑動處於move狀態時通過((indexbar) getparent()).setdrawdata()把一系列位置引數傳到indexbar中去
@override
public
boolean
ontouchevent
(motionevent event)
}break
;case motionevent.action_up:
//抬起
((indexbar)
getparent()
).settagstatus
(false);
mpaint.
setcolor
(color.gray)
;invalidate()
;break;}
return
true
;}
主要是在onlayout中把sidebar排列到最右側,並在ondraw中根據sidebar傳過來的一系列位置引數來不斷改變圓的位置,
這裡要注意一下,自定義viewgroup的ondraw()方法預設是不會呼叫的,如果想執行ondraw方法,可以通過下面兩種方法:1.設定透明背景:
在建構函式中:setbackgroundcolor(color.transparent);
或者在xml中:android:background="@color/transparent"
2.或者可以在建構函式中新增setwillnotdraw(false);
@override
protected
void
onlayout
(boolean changed,
int l,
int t,
int r,
int b)
@override
protected
void
ondraw
(canvas canvas)
}
step 4: 關聯recycleviewsidebar.
setindexchangelistener
(new
sidebar.indexchangelistener()
}}})
;
如果本文對你有所幫助,還望可以隨手賞乙個點讚哈 ~ ~ 手把手帶你實現乙個mini版jquery
我們要實現的功能如下 amd模組檢測if typeof define function define.amd 執行結構 var jquery function window,undefined window 對dom集合進行儲存,生成jquery物件 function query dom,selec...
手把手帶你實現乙個可用的單點登入系統
怎麼能夠快速實現乙個 sso 系統,這是很多在企業裡開發登入模組的朋友經常遇到的問題。中文網路上有太多的討論,但能夠引導大家真正去實現乙個 sso 系統的卻鳳毛麟角。本文立足於 sso 系統的實現,只講實現,不扯概念,幫助大家構建出乙個可用的 sso 系統。本場 chat 您將收穫 了解乙個 sso...
手把手帶你開發乙個前端命令列工具
命令列工具,即cli command line inte ce 是在圖形使用者介面得到普及之前使用最為廣泛的使用者介面,它通常不支援滑鼠,使用者通過鍵盤輸入指令,計算機接收到指令後,予以執行。在學習這篇教程之前,我們需要先了解nodejs,npm和一些常用的shell命令相關知識點。那怎樣才可以從0...