设置状态栏显示在屏幕底部
修改com.android.server.status.StatusBarService类中的方法:
(1) public void systemReady() {
? ?? ???...
? ?? ? //这里把 Gravity.TOP -> Gravity.BOTTOM
? ?? ? lp.gravity = Gravity.BOTTOM | Gravity.FILL_HORIZONTAL;
? ?? ? lp.setTitle("StatusBar");
? ?? ? lp.windowAnimations = R.style.Animation_StatusBar;
? ?? ? WindowManagerImpl.getDefault().addView(view, lp);
? ? }??
(2) void onBarViewAttached() {
? ?? ? ...
? ?? ? //这里把 Gravity.TOP -> Gravity.BOTTOM
? ?? ? lp.gravity = Gravity.BOTTOM | Gravity.FILL_HORIZONTAL;
? ?? ? lp.setTitle("TrackingView");
? ?? ? lp.y = mTrackingPosition;
? ?? ? mTrackingParams = lp;
? ?? ? WindowManagerImpl.getDefault().addView(mTrackingView, lp);
? ? }
方法(1)是系统启动的时候,服务读取状态栏时调用的方法。
屏幕加载窗体涉及到进程之间的通讯。而各个窗体加载时都是以状态栏的为参考点,位于状态栏之下的。
如果不修改窗体加载时的参考点,状态栏移到最下面后,则各个窗体会显示在屏幕之外。
窗体的位置计算在PhoneManagerService类中进行。在public void beginLayoutLw()修改:
把mDockTop= mContentTop = mCurTop = mStatusBar.getFrameLw().bottom; 更改为:
mDockTop =mContentTop = mCurTop = 0;
即以屏幕的左上角坐标(0,0)为参考点
修改mDockBottom ,mCurBottom, mContentBottom 的值,让它最终的值与下移后的状态栏的TOP位置一样。