前言:
笔者最近做一个平板的项目需要彻底隐藏系统状态栏及底部虚拟导航栏从而达到全屏的效果,试了很多方案都不太好,有些虽然能达到类似效果,但会因为其他因素例如弹框,手上滑而失去效果。在大部分项目是够用的,但像我这种特殊情况,就得用特殊方法去解决了,首先小伙伴们得明确自己的需求,我这里使用的方法是让它永远不出现,即全屏,因为我做的是launcher定制项目,所以有类似需求伙伴,你们的福利来了。使用这些方法,有一个前提,那就是需要root权限,好了,下面我直接亮代码了。
一,隐藏SystemUI(即状态栏及底部虚拟导航栏)
//隐藏SystemUI
public static boolean hideNavigation(Context context){
boolean ishide;
try
{
String command;
command = "LD_LIBRARY_PATH=/vendor/lib:/system/lib service call activity 42 s16 com.android.systemui";
Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c",
command });
proc.waitFor();
ishide = true;
}
catch(Exception ex)
{
Toast.makeText(context, ex.getMessage(),
Toast.LENGTH_LONG).show();
ishide = false;
}
return ishide;
}
二,显示SystemUI
//显示SystemUI
public static boolean showNavigation(){
boolean isshow;
try
{
String command;
command = "LD_LIBRARY_PATH=/vendor/lib:/system/lib am startservice -n com.android.systemui/.SystemUIService";
Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c",
command });
proc.waitFor();
isshow = true;
}
catch (Exception e)
{
isshow = false;
e.printStackTrace();
}
return isshow;
}
三,普通方法(不需root适合大部分项目)
protected void hideBottomUIMenu() {
int flags;
int curApiVersion = android.os.Build.VERSION.SDK_INT;
// This work only for android 4.4+
if(curApiVersion >= Build.VERSION_CODES.KITKAT){
// This work only for android 4.4+
// hide navigation bar permanently in android activity
// touch the screen, the navigation bar will not show
flags = View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
}else{
// touch the screen, the navigation bar will show
flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
}
// must be executed in main thread :)
getWindow().getDecorView().setSystemUiVisibility(flags);
}