初次接觸沉浸式,本文先從純色入手。
安卓狀態列沉浸式從大於等於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...