Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Preventing status bar expansion

Tags:

Is there anyway to prevent users from sliding the status bar (expand) or collapsing back?

I'm trying out a lockscreen replacement and seems like it's a must-have feature. Is there any possible way to do it without requiring root privileges?

like image 724
Ye Myat Min Avatar asked Sep 17 '11 20:09

Ye Myat Min


1 Answers

You can actually prevent the status bar from expanding, without rooting phone. See this link. This draws a window the height of the status bar and consumes all touch events.

Call the following code just after onCreate().

public static void preventStatusBarExpansion(Context context) {     WindowManager manager = ((WindowManager) context.getApplicationContext()             .getSystemService(Context.WINDOW_SERVICE));      Activity activity = (Activity)context;     WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams();     localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;     localLayoutParams.gravity = Gravity.TOP;     localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|      // this is to enable the notification to recieve touch events     WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |      // Draws over status bar     WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;      localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;     //https://stackoverflow.com/questions/1016896/get-screen-dimensions-in-pixels     int resId = activity.getResources().getIdentifier("status_bar_height", "dimen", "android");     int result = 0;     if (resId > 0) {         result = activity.getResources().getDimensionPixelSize(resId);     }      localLayoutParams.height = result;      localLayoutParams.format = PixelFormat.TRANSPARENT;      customViewGroup view = new customViewGroup(context);      manager.addView(view, localLayoutParams); }  public static class customViewGroup extends ViewGroup {      public customViewGroup(Context context) {         super(context);     }      @Override     protected void onLayout(boolean changed, int l, int t, int r, int b) {     }      @Override     public boolean onInterceptTouchEvent(MotionEvent ev) {         Log.v("customViewGroup", "**********Intercepted");         return true;     } } 
like image 108
Kristy Welsh Avatar answered Sep 22 '22 01:09

Kristy Welsh