安卓沉浸式狀態列初體驗

2021-07-25 23:26:18 字數 3684 閱讀 9583

初次接觸沉浸式,本文先從純色入手。

安卓狀態列沉浸式從大於等於19即安卓4.4開始有了第一種實現方案即使用systembartintmanager:

window window =activity.getwindow();

window.setflags(windowmanager.layoutparams.flag_translucent_status,

windowmanager.layoutparams.flag_translucent_status);

//使用systembartint庫使4.4版本狀態列變色,需要先將狀態列設定為透明

systembartintmanager tintmanager = new systembartintmanager(activity);

tintmanager.setstatusbartintenabled(true);

tintmanager.setstatusbartintcolor(color);

其中,後面的呼叫需要先把狀態列設定為透明。

而在android21即安卓5.0之後,安卓給出了比較簡單的設定狀態列顏色的方法:

window window = activity.getwindow();

window.clearflags(windowmanager.layoutparams.flag_translucent_status);

window.addflags(windowmanager.layoutparams.flag_draws_system_bar_backgrounds);

window.setstatusbarcolor(color);

這種方法則需要標誌位先清除狀態列半透明標誌,使能回執系統條背景標誌。

經過測試,這種方法確實會設定狀態列的顏色,不過狀態列上面會根據系統不同,有不同樣式的蒙層,比如miui8裡面會有乙個爆醜的蒙層。

如果不需要,可以退回到第一種方案。

沉浸式不僅需要改變背景的顏色,還需要改變文字的顏色。

文字預設是白色的,當我們使用較淺的顏色作為狀態列背景時,文字是看不清楚的。

改變文字的顏色,目前為止方法有限。

到了android6.0之後,谷歌才放出了修改文字為深色的方法:

window.clearflags(windowmanager.layoutparams.flag_translucent_status);

window.addflags(windowmanager.layoutparams.flag_draws_system_bar_backgrounds);

window.getdecorview().setsystemuivisibility(view.system_ui_flag_layout_fullscreen|view.system_ui_flag_light_status_bar);

其中,system_ui_flag_light_status_bar為6.0才有的標記,呼叫需要標誌位有以上限制。

除了6.0以外,各個手機廠商有自己的修改文字深淺風格的方法,比如miui:

private static boolean setmiuistatusbarmode(window window, boolean dark) else

result=true;

}catch (exception e)

}return result;

}

再比如魅族的flyme:

private static boolean setflymestatusbarmode(window window, boolean dark)  else 

meizuflags.setint(lp, value);

window.setattributes(lp);

result = true;

} catch (exception e)

}return result;

}

最後給出完整的**:

/**

* 頂部狀態列幫助類

* created by liangy on 2017/1/11.

*/public class statusbarhelper else if (romhelper.isflyme())else if (build.version.sdk_int >= build.version_codes.m)

return result;

}/**

** @param activity

* @param dark 把文字設定成深色

* @return

*/public static boolean setstatusbarmode(activity activity, boolean dark)

// step 2. 如果能夠成功修改圖示和文字的模式,則繼續修改背景色與之匹配

if (true)else

}return result;

}/**

* 修改狀態列顏色,支援4.4以上版本

* @param activity

* @param color

*/public static boolean setstatusbarcolor(activity activity,int color) else */

if (build.version.sdk_int >= build.version_codes.kitkat)

return false;

}/**

* 設定狀態列圖示為深色和魅族特定的文字風格

* 可以用來判斷是否為flyme使用者

* @param window 需要設定的視窗

* @param dark 是否把狀態列字型及圖示顏色設定為深色

* @return boolean 成功執行返回true**/

private static boolean setflymestatusbarmode(window window, boolean dark) else

meizuflags.setint(lp, value);

window.setattributes(lp);

result = true;

} catch (exception e)

}return result;

}/**

* 設定狀態列字型圖示為深色,需要miuiv6以上

* @param window 需要設定的視窗

* @param dark 是否把狀態列字型及圖示顏色設定為深色

* @return boolean 成功執行返回true**/

private static boolean setmiuistatusbarmode(window window, boolean dark) else

result=true;

}catch (exception e)

}return result;

}private static boolean setandroidmstatusbarmode(window window, boolean dark)else

return true;

}}

安卓沉浸式狀態列

public class statusbarcompat return 當前手機版本為4.4 if build.version.sdk int build.version codes.kitkat build.version.sdk int build.version codes.lollipop ...

安卓沉浸式狀態列

activity的子fragment的標題頂到狀態列 當乙個activity介面下有4個同級的fragment的時候,首頁的fragment頂部是的時候,設定了透明狀態列之後就會造成其他介面的標題頂到狀態列中,這個時候只需要設定一下標題布局在父控制項的layoutparams,layoutparam...

安卓狀態列問題詳解大全(沉浸式狀態列)

1.解決頂部問題 2安卓透明狀態列和底部操作欄 在setcontentview 前面加上以下 解決底部重疊的問題 具體顏色自行修改 private void setstaus 3沉浸式狀態列 rl bar title這個布局是空的linnearlayout 放到headview的上面 protect...