




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Android高級界面設計第4章學習目標掌握Android高級UI布局的使用方法(★);掌握Android高級UI組件的使用場景與方法(★);了解MaterialDesign設計理念了解自定義View2023/12/132第4章Android高級界面設計內容大綱MaterialDesign設計理念Android的高級布局Android的高級控件自定義View2023/12/133第4章Android高級界面設計上次課回顧什么是MaterialDesignConstraintLayout的相對布局如何設置什么是CoordinatorLayout,如何與AppBarLayout組合什么是DrawerLayout2023/12/134第4章Android高級界面設計4.3高級UI組件內容大綱RecyclerViewCardViewFloatingActionButtonNavigationViewViewPagerToolbar2023/12/136第4章Android高級界面設計RecyclerViewRecyclerView是用于大量數據集合的可滾動的列表容器,是ListView的替代控件優點:高效且靈活,高度解耦可以使用和重用有限的視圖元素可以快速更新變化的數據提供三種不同的布局管理LayoutManager提供各種動畫及分割線ItemDecoration、ItemAnimator,實現轉場效果缺點:需自定義列表分割線需自定義實現列表的點擊事件2023/12/137第4章Android高級界面設計RecyclerView組件數據Data:無需關心數據來源可滾動的列表項集合
—RecyclerViewUI界面的布局管理—Recyclerview.LayoutManager
RecyclerView連接數據的適配器—RecyclerView.Adapter每個列表項布局—XMLfile顯示列表項的每個控件的信息—RecyclerView.ViewHolder2023/12/13第4章Android高級界面設計8RecyclerView的布局管理每種ViewGroup都有一個布局管理器,用于定位每個列表項的位置,可以重用對于用戶不可見的列表項內置的布局管理器,它們都繼承自LayoutManangerLinearLayoutManangerGridLayoutManangerStaggeredGridLayout2023/12/13第4章Android高級界面設計9RecyclerView的布局LinearLayoutManagerGridLayoutManagerStaggeredGridLayoutManager2023/12/13第4章Android高級界面設計10RecyclerView.AdapterAdapter作為視圖和數據之間的中介,管理在數據更改時創建、更新、添加和刪除列表項ViewHolder為適配器準備每個列表項的視圖和數據,它在XML資源文件中指定布局,實現點擊功能2023/12/13第4章Android高級界面設計11RecyclerView.AdapterRecyclerView.Adapter需要重寫以下三個方法onCreateViewHolder():此方法通過inflate()方法將列表項item布局編譯為View對象,返回以這個對象為參數的ViewHolder對象。onBindViewHolder():此方法主要將數據渲染到列表項的ViewHolder的View控件中;getItemCount():此方法類似于ListView的BaseAdapter適配器的getCount()方法,即數據的總條目。2023/12/13第4章Android高級界面設計12item的點擊事件RecyclerView.Adapter本身沒有ListView的OnItemClick點擊事件的監聽器解決方案設置ViewHolder的itemView的OnClick事件監聽,通過setTag()存儲itemView對象信息Adpater類自定義內部事件接口,定義事件處理的回調方法,參數為被點擊item的位置;Activity或Fragment類實現或創建該接口的對象,實現回調方法;當item被點擊時調用該接口的回調方法,將位置信息傳遞給回調方法實現RecyclerView的onItemTouchListener接口,通過GestureDetectorCompat類進行手勢的攔截和響應,然后GestureDetectorCompat交給實現了OnGestureListener接口的SimpleOnGestureListener實現,調用邏輯相對較為復雜2023/12/13第4章Android高級界面設計13RecyclerView.Adapter的數據更新notifyDataSetChanged():通知更新adapter的記錄集notifyItemAdded(position):通知在position位置添加了記錄notifyItemChanged(position):通知修改了postion位置的記錄notifyItemRemoved(position):通知刪除了position位置的記錄notifyItemMoved(position):通知移動了position位置的記錄notifyAll():通知記錄集發生了更新2023/12/13第4章Android高級界面設計14item的滑動刪除和拖曳ItemTouchHelper:處理拖曳和滑動刪除的實現類ItemTouchHelperitemTouchHelper=newItemTouchHelper(newItemTouchHelper.Callback());itemTouchHelper.attachToRecyclerView(recyclerView);回調接口Callback的方法onMove():長按拖曳的回調getMovementFlags():設置拖曳、滑動方向onSwiped():滑動刪除的回調2023/12/13第4章Android高級界面設計15實現RecyclerView實現步驟添加RecyclerView的依賴項布局添加RecyclerView給每個Item創建XML布局文件創建繼承自RecyclerView.Adapter的適配器類創建繼承自RecyclerView.ViewHolder的列表項類在Activity的onCreate()方法中使用適配器和布局管理器創建RecyclerView對象案例:D0404_RecyclerView2023/12/13第4章Android高級界面設計16實現下拉刷新依賴庫:androidx.swiperefreshlayout:swiperefreshlayout:1.1.0使用SwiperefreshLayout作為RecyclerView的父布局設置它的OnRefreshListener監聽器,加載數據以及刷新adapter2023/12/13第4章Android高級界面設計17RecyclerView的原理解析2023/12/13第4章Android高級界面設計18RecyclerView的四級緩存2023/12/13第4章Android高級界面設計19一級緩存:屏幕內緩存Scrap,返回布局及內容都有效的ViewHolder,無需onCreateViewHolder和onBindViewHolder。當列表滑動出屏幕時,ViewHolder會被緩存在mCachedViews,其大小由mViewCacheMax決定,默認為2,可通過RecyclerView的setItemViewCacheSize()動態設置二級緩存:直接返回View,繼承ViewCacheExtension類實現自定義緩存三級緩存:返回布局有效、內容無效的ViewHolder,需要調用onBindViewHolder,ViewHolder首先緩存在mCachedViews中,當超過后就添加到RecyclerViewPool中界面刷新的緩存處理2023/12/13第4章Android高級界面設計20notifyItemChange(position)被更新的Item放入ChangeScrap,不需要onCreateViewHolder,需要調用onBindViewHoldernotifyDataSetChange()0~4放入RecyclerPool,不需要onCreateViewHolder,但全部需要onBindViewHolder更新position=1的數據滾動的緩存處理2023/12/13第4章Android高級界面設計21向上滑動的緩存處理2023/12/13第4章Android高級界面設計22CardViewCardView是Google官方發布的MaterialDesign風格的卡片布局控件CardView控件用于實現立體的卡片,提供圓角、陰影等特效CardView繼承自FrameLayout類,可以理解為帶圓角陰影和水波紋效果的FrameLayout布局常用屬性:屬性屬性含義app:cardBackgroundColor設置背景顏色app:cardCornerRadius設置圓角半徑app:cardElevation設置z軸的陰影深度app:cardMaxElevation設置z軸的最大高度值app:contentPadding設置內容與邊距的間隔app:cardUseCompatPadding設置Android5.0及以上版本是否添加padding,默認值為falseAndroid5.0以下默認添加paddingapp:cardPreventConrerOverlap是否給content添加padding來阻止與圓角重疊,默認值為true案例:D0404_RecyclerView/item_fruit_card.xmlFloatingActionButton2023/12/13第4章Android高級界面設計23FloatingActionButton是一種浮動的圓形按鈕,具有一些獨特的動態效果,比如變形、彈出、位移等,代表著在當前頁面上用戶的特定操作,簡稱為FAB與普通按鈕相比,FAB能為應用程序帶來更加豐富炫麗的界面效果及用戶體驗FAB繼承自ImageView,具備ImageView的所有屬性屬性含義取值app:backgroundTint邊框背景顏色顏色值app:tint圖標顏色,無法修改圖片顏色顏色值app:rippleColor點擊時的漣漪顏色顏色值app:borderWidthfab的邊框大小通常設為0dpapp:elevation默認狀態的Z軸的陰影大小默認值:6dpapp:pressedTranslationZ點擊狀態的Z軸的偏移量默認值:12dpapp:fabSizefab的大小auto、normal(56dp)、mini(40dp)app:srcfab的圖標符合Design設計的圖標大小為24dpapp:layout_anchor設置錨點
app:layout_anchorGravity設置相對錨點的位置bottom、center、top等FloatingActionButton常用方法voidshow():顯示按鈕voidhide():隱藏按鈕booleanisShown():返回顯示狀態voidsetOnClickListener(OnClickListener):設置單擊監聽器最佳實踐按照標準設定尺寸,不要輕易修改它的樣式點擊和按壓的時候,加深焦點的顏色表示這是一個點擊不要過度使用FAB,應用于當前頁面最主要的操作,每個頁面最好只有一個FABFAB的顏色比較搶眼,最好對其設定一些積極的操作,如:創建、分享等,避免輕微和破壞性的操作,如:刪除等推薦只使用一個FAB,如果需要多個操作,可以點擊后將它展開顯示更多操作按鈕案例:D0404_RecyclerView/item_fruit_card.xml2023/12/13第4章Android高級界面設計24NavigationView2023/12/13第4章Android高級界面設計25NavigationView是遵循MaterialDesign設計風格的菜單導航類,用來規范側滑菜單的基本樣式包括頭部布局headerLayout和內容菜單menu兩部分,配合DrawerLayout、Toolbar實現側滑抽屜式菜單功能NavigationView的使用和普通的側滑菜單基本相同,只需要在DrawLayout中添加即可案例:D0403_DrawerLayout2023/12/13第4章Android高級界面設計26NavigationViewNavigationView常用屬性及方法屬性名稱含義描述app:insetForeground="@android:color/transparent"沉浸式展示app:headerLayout="@layout/nav_header"添加Header布局app:menu="@menu/nav_menu"添加標簽Item的菜單android:layout_gravity="start"左側拉出NavigationView方法名稱含義描述addHeaderView(Viewview)將視圖添加為導航菜單的標題removeHeaderView(Viewview)刪除已添加的標題視圖setItemBackgroundResource(intresId)設置菜單項的背景inflateMenu(intresId)在此導航視圖中添加菜單資源setItemTextColor(ColorStateListtextColor)設置菜單項使用的文本顏色setItemIconTintList(ColorStateListtint)設置菜單項使用Icon的顏色setNavigationItemSelectedListener(NavigationViewlistener)設置菜單項選中的監聽器ViewPager是Android的一個自帶動畫效果的視圖滑動切換組件,可以通過手勢滑動完成View的切換,主要用于App的引導頁或圖片輪播等。ViewPager的特性ViewPager類繼承自ViewGroup類,它實際是一個容器,可以在其中添加其它View控件ViewPager類需要一個Adapter適配器綁定視圖,主要使用PagerAdapter適配器類ViewPager經常與Fragment共同使用PagerAdapter適配器的主要方法getCount():獲取ViewPager一共有多少頁面isViewFromObject(View,Object):確定頁面View是否與instantiateItem()方法返回的key對象相關聯instantiateItem(ViewGroup,int):創建給定位置的頁面,適配器將創建的View添加到給定的容器container中destroyItem(ViewGroup,int,Object):移除給定位置的頁面2023/12/13第4章Android高級界面設計27ViewPager2023/12/13第4章Android高級界面設計28ViewPagerViewPager常用方法方法名稱方法含義setAdapter(PagerAdapter)將ViewPager與適配器進行綁定addOnPageChangeListener(ViewPager.OnPageChangeListener)添加Pager滑動的監聽器removeOnPageChangeListener(ViewPager.OnPageChangeListener)移除監聽器clearOnPageChangeListener()清除監聽器setCurrentItem(int,boolean)控制頁面直接跳轉到指定位置的界面getCurrentItem()獲取當前頁面的索引setPageTransformer(boolean,ViewPager.PageTransformer)設置滑動動畫,如:翻轉、漸近漸出setOffscreenPageLimit(int)設置當前頁面左右兩側緩存的頁面數量常用組合TabLayout+ViewPager+Fragment可以用來進行分頁滑動展示ToolbarToolbar是在Android5.0推出的MaterialDesign風格的導航控件,它比ActionBar更具設計彈性,官方推薦使用Toolbar取代ActionBarToolbar與ActionBar不同之處在于,ActionBar獨立于布局之外,會固定在界面頂部,但Toolbar直接在布局文件中定義,可以在界面布局結構中依照需求任意配置,可以跟著ScrollView滾動,可以與布局中的其他View交互,對滑動事件的響應等通過setSupportActionBar()或setActionBar()方法使用Toolbar來取代ActionBar可以定制導航欄圖標、設置App的logo、設置標題與子標題,支持添加多個控件2023/12/13第4章Android高級界面設計29使用Toolbar使用Toolbar的基本步驟設置整個App的主題樣式為NoActionBar在Activity的布局文件中添加Toolbar布局在Activity類的onCreate()方法中調用setSupportActionBar()顯示Toolbar創建選項菜單,通過showAsAction屬性設置菜單項的展示屬性,還可以設置菜單項的操作視圖對象actionViewClass或操作提供器對象actionProviderClass處理菜單項的點擊事件案例:D0405_Toolbar2023/12/13第4章Android高級界面設計30
4.4自定義View312023/12/13第4章Android高級界面設計2023/12/13第4章Android高級界面設計32自定義ViewView類是UI的基類可以擴展View或View子類,自定義外觀和與用戶交互的行為自定義View有以下幾種形式類型使用場景實現方式注意點繼承特定View拓展已有View的功能在原有View的基礎上增加功能不需要支持wrap_content和padding繼承View實現某種效果的自定義控件通過重寫onDraw()實現繪制需要編寫支持wrap_content和padding的代碼繼承特定ViewGroup擴展某種布局的布局方式在原有ViewGroup的基礎上增加與自定義ViewGroup相比,較簡單,但自由度不高繼承ViewGroup實現某種效果的自定義布局實現子View的measure、layout過程需要編寫支持wrap_content、padding和Margin創建自定義View的步驟創建繼承自View或View子類的自定義類重寫View的方法繼承View:重寫onDraw()方法繪制View繼承View子類:重寫行為或外觀方法在layout布局文件中使用自定義View案例:D0406_Cust
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 提升成效國際商業美術設計師考試試題及答案
- 《血細胞形態特征》課件
- 核與輻射安全試題及答案
- 廣告設計師證書考試設計成果評估機制題及答案
- 2024年設計師考試知識結構試題及答案
- 酒店客戶關系管理策略研究
- 市政排水管網改造方案探索與前景分析
- 紡織品檢驗員考試能力評估試題及答案
- 推理與判斷課件
- 培養國際競爭力人才的策略與實施路徑分析
- 現場應急通信指揮系統建設方案
- 旁站記錄表(樁基)
- 生命倫理學期末測試習題與答案
- 聲波吹灰系統安裝、調試、操作說明書
- 英國電影概況
- 幕墻工程施工講解
- 鏡頭蓋注塑模具
- 《公主嘗衣貼繡鋪翠襦入宮中》2020年江西省中考文言文閱讀真題(含答案與翻譯)
- 計算機應用技術畢業論文-計算機應用技術論文5000字
- 《學弈》公開課課件完整版
- GA 1801.2-2022國家戰略儲備庫反恐怖防范要求第2部分:通用倉庫
評論
0/150
提交評論