设置状态栏显示在屏幕底部
修改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位置一样。修改成:mDockBottom = mContentBottom = mCurBottom = ( displayHeight - mStatusBar.getFrameLw().height());
也可以修改成:mDockBottom = mContentBottom = mCurBottom = mStatusBar.getFrameLw().top; 1 楼 guidian103 2012-02-06 4.0的怎么修改? 那样修改是成功了,但是4.0的好像 拉不上来啊。那个触摸没有用啊 2 楼 dss16694 2012-02-22 汗,这篇文章只是偶尔看到备份在博客,我自己还没来得及试呢,不好意思,呵呵 3 楼 dss16694 2012-02-22 不过可以研究下CM7的源码看看,CM7中的CM设置中可以设置状态栏下置的