Android通過修改Framework隱藏系統(tǒng)狀態(tài)欄

其實(shí),真的需要完全隱藏系統(tǒng)狀態(tài)欄的需求并不是很多,只有一些定制性的需求的時(shí)候才有這樣的要求,這次就是這樣的要求,需要完全隱藏系統(tǒng)狀態(tài)欄,考慮修改Framework的SystemUI來實(shí)現(xiàn)。這些需要使用源碼開發(fā)環(huán)境,我們修改以后,需要啟動(dòng)模擬器測(cè)試效果。

我們主要是想通過隱藏StatusBar來消除通知欄,在Android_Source
/frameworks/base/packages/SystemUI/src
下我們可以找到
com.android.systemui.statusbar包下面的BaseStatusBar.java文件,
查看源碼,發(fā)現(xiàn)在start()方法中有調(diào)用一個(gè)抽象方法createAndAddWindows();查看這個(gè)抽象方法的實(shí)現(xiàn),有
/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
這是兩種不同模式下的處理,這里我們測(cè)試修改PhoneStatusBar里面的代碼:

@Override
public void createAndAddWindows() {
   addStatusBarWindow();
}

調(diào)用了addStatusBarWindow();方法,在這個(gè)方法中:

private void addStatusBarWindow() {
  // Put up the view
  final int height = getStatusBarHeight();

  // Now that the status bar window encompasses the sliding panel and its
  // translucent backdrop, the entire thing is made TRANSLUCENT and is
  // hardware-accelerated.
  final WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
  ViewGroup.LayoutParams.MATCH_PARENT,
  height,
  WindowManager.LayoutParams.TYPE_STATUS_BAR,
  WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
  | WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING
  | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH,
  PixelFormat.TRANSLUCENT);

  lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;

  lp.gravity = getStatusBarGravity();
  lp.setTitle(“StatusBar”);
  lp.packageName = mContext.getPackageName();

  makeStatusBarView();
  WindowManagerImpl.getDefault().addView(mStatusBarWindow, lp);  
}

我們看到調(diào)用了makeStatusBarView();方法,在這個(gè)方法最后返回前,我們添加一行代碼

mStatusBarView.setVisibility(View.GONE);

把它隱藏。然后重新編譯framework,啟動(dòng)模擬器,可以看到系統(tǒng)狀態(tài)欄確實(shí)看不到了,但是狀態(tài)欄的位置還在,一片黑色罷了。

繼續(xù)嘗試修改,找到%Android_Source%/frameworks/base/core/res/res/values/dimens.xml

修改<dimen name=”status_bar_height”>25dip</dimen>為<dimen name=”status_bar_height”>0dip</dimen>

再次編譯framework,重啟模擬器測(cè)試。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容