Android 三步簡單適配齊劉海系統狀態列

2021-08-29 18:27:48 字數 4400 閱讀 2024

說到齊劉海適配,最典型的就是mainactivity的幾個fragment有的需要透明系統狀態列 有的不需要, 而一般需要透明系統狀態列的fragment頂部都會放個輪播圖,然後在輪播圖上放搜尋框,所謂適配,就是指搜尋框的位置根據系統狀態列高度設定,達到在齊劉海手機上搜尋框不被覆蓋;

如上圖所示,下面對如動態圖所示系統狀態列進行三步分析

兩行**就能獲取當前系統狀態列的高度

int resourceid = mcontext.

getresources()

.getidentifier

("status_bar_height"

,"dimen"

,"android");

int viewheight = mcontext.

getresources()

.getdimensionpixelsize

(resourceid)

;

根據ui的需求,我的做法是先設定系統狀態列透明,監聽手勢動作,開始滑動時,增加乙個系統狀態列同高的view,更改背景色漸變(漸變值為0-100%,百分比同 滑動距離/輪播圖高度),更改系統狀態列圖示顏色為深色,再重寫scrollview,監聽滑動置頂時,設定透明系統狀態列,隱藏佔位view

/**

* 設定透明系統狀態列

*/view decorview =

getactivity()

.getwindow()

.getdecorview()

;decorview.

setsystemuivisibility

(view.

system_ui_flag_layout_fullscreen

| view.

system_ui_flag_layout_stable);

getactivity()

.getwindow()

.setstatusbarcolor

(color.

parsecolor

("#00000000"))

;//設定透明

/**

* 設定系統狀態列圖示顏色,用false和true 設定顏色為白色或者深色

*/ statusbarcompat.

setlightstatusbar

(getactivity()

.getwindow()

,false

);

/**

* 滑動監聽

*/private myscrollview.onmyscrolllistener listener;

listener =

newmyscrollview.onmyscrolllistener()

else

if(state ==1)

else

if(state ==2)

else

log.d(

"brycegao"

,"滑動狀態:"

+ str);}

@override

public

void

onscroll

(myscrollview view, int y)

statusbarcompat.

setlightstatusbar

(getactivity()

.getwindow()

,true);

//設定導航欄字型顏色}}

} @override

public

void

onscrolltotop()

@override

public

void

onscrolltobottom()

};

/**

*/public

class

myscrollview

extends

scrollview

public

myscrollview

(context context)

public

myscrollview

(context context, attributeset attrs)

public

myscrollview

(context context, attributeset attrs, int defstyleattr)

@override public boolean ontouchevent

(motionevent ev)}if

((ev.

getactionmasked()

== motionevent.

action_up

|| ev.

getactionmasked()

== motionevent.

action_cancel

)&& currentstate == onmyscrolllistener.

scroll_state_touch_scroll)}

boolean curdragstate =

getdragstate()

;//拖動if(

!lastdragstate && curdragstate)

}return ret;

} @override protected

void

ondraw

(canvas canvas)}if

(getscrolly()

==0&& lastdrawpos ==

0&& currentstate != onmyscrolllistener.

scroll_state_idle)}

lastdrawpos =

getscrolly()

;if(iscurrentbottom()

&&!islastbottom)

} islastbottom =

iscurrentbottom()

;}@override public

void

fling

(int velocityy)}}

//判斷是否滑到底部

private boolean iscurrentbottom()

elseif(

getmeasuredheight()

- heightpadding +

getscrolly()

== child.

getmeasuredheight()

)return ret;

}//反射查詢misbeingdragged

private boolean getdragstate()

catch

(exception ex)

return state;

}//滑動加速器是否停止

private boolean isfinishscroll()

catch

(nosuchfieldexception e)

catch

(illegalacces***ception e)

catch

(nosuchmethodexception e)

catch

(invocationtargetexception e)

return isfinish;

}/**

* 新增滑動監聽

* @param listener

*/public

void

addonscrolllistner

(onmyscrolllistener listener)if(

!listeners.

contains

(listener))}

public

void

removeonscrolllistener

(onmyscrolllistener listener)

listeners.

remove

(listener);}

}

其實這個ui適配也很簡單的,就是設定搜尋框的paddingtop為系統狀態列的高度+xdp,這裡就不寫**了

三步實現Android懸浮效果

之前做專案的時候實現的乙個懸浮效果,如圖 可能不夠清晰 meibei.gif 接下來就是實現效果,如圖所示 sticky.gif 原理很簡單,用recyclerview addheaderview的方式實現,實現步驟 1.新增依賴 compile com.github.cymchad baserec...

IOS開發 簡單三步配置cocoapods

確定已經安裝好ruby 開啟 終端 mac自帶軟體 第一步 在終端中輸入 cd 檔案路徑 可以直接將工程資料夾拖進去 回車 第二步 在終端中輸入 pod init 開啟自己工程資料夾,會發現多了乙個podfile檔案 只需要修改podfile檔案 target 工程名字 do pod 第三方名稱 版...

WampServer新手安裝簡單三步走

個人部落格 www.sysadm.cc wampserver作為一款在windows下編寫除錯php 的神器之一,一度受到新手小白們的熱捧。無奈對於新手小白們來說,其安裝略顯複雜,易於爆出的各類問題層出不窮 令人生畏。瞧瞧這簡介 wampserver是一款由法國人開發的apache web伺服器 p...