Android5.1永久隐藏工具栏定制
最近有個需求: 勾選"永久隱藏工具欄"時,要求導(dǎo)航欄隱藏,狀態(tài)欄不隱藏。
一. 源碼中找到/packages/apps/Settings/src/com/android/settings/DisplaySettings.java:
可以看到勾選"永久隱藏工具欄"時發(fā)送了個廣播,
@Override
??? public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
??????? if(preference == mSystemBarHide)
?? ?{
?? ???? if(mSystemBarHide.isChecked()){
?? ??? ?Intent i = new Intent("com.cdhx.removebar");
?? ??? ?getActivity().sendBroadcast(i);
?? ???? } else {
?? ??? ?Intent i = new Intent("com.cdhx.addbar");
?? ??? ?getActivity().sendBroadcast(i);
?? ???? }
??????? }
??????? return super.onPreferenceTreeClick(preferenceScreen, preference);
??? }
二. 在/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java:
2.1.找到對應(yīng)的廣播動作:
else if("com.cdhx.removebar".equals(action)) {
????????????????????? Settings.System.putInt(mContext.getContentResolver(), Settings.System.SYSTEMBAR_HIDE,1);
?????????????????????? mHandler.removeMessages(MSG_CHANGE_BAR_HIDE_STATUS);
?????????????????????? mHandler.sendEmptyMessageDelayed(MSG_CHANGE_BAR_HIDE_STATUS, 400);
??????????? }
2.2.對應(yīng)的更新UI消息:
case MSG_CHANGE_BAR_HIDE_STATUS:
?????????????????????? changeBarHideStatus();
?????????????????????? break;
找到changeBarHideStatus();
?private void changeBarHideStatus()
??????? {
??????????? boolean hide_systembar = Settings.System.getInt(mContext.getContentResolver(),Settings.System.SYSTEMBAR_HIDE,0)==1;
??????????? if(hide_systembar)
??????????????? removeBar(false);
??????????? else{
??????????????? addBarInside(hide_systembar);? ?
??????????? }
??????? }
三.找到removeBar( ):
private void removeBar(boolean needToast){
??????????????? if (mBarIsAdd){
??????????????????????? Log.d(TAG,"remove Bar");
?? ??? ??? ??? ??? ?if(mContext.getResources().getConfiguration().enableMultiWindow()){
?? ??? ??? ??? ??? ??? ?try {
?? ??? ??? ??? ???????????? mWindowManagerService.changeTitleBar(false);
?? ??? ??? ??? ???????? } catch (RemoteException e) {
?? ??? ??? ??? ???????????? Log.w(TAG, "Error changeTitleBar transition: " + e);
?? ??? ??? ??? ???????? }
?? ??? ??? ??? ??? ???? }
??????????????????????? if (mNavigationBarView != null){
??????????????????????????????? mWindowManager.removeViewImmediate(mNavigationBarView);
?????????????????????? }
?????????????????????? if (!mContext.getResources().getConfiguration().enableMultiWindow()&&mStatusBarWindow != null)
?? ??? ??? ?? ??? ? ?? ??????? mStatusBarWindow.setVisibility(View.GONE);
????????????????????? if(signalCluster_win!=null)
?? ??? ??? ??? ??? ?????? signalCluster_win=null;
?? ??? ??? ??? ??? ?? if (mNavigationBarView != null)
?? ??? ??? ??? ??? ?????? mNavigationBarView = null;
?? ??? ??? ??? ??? ??? ? ?
????????????????????? if(mNotificationLite != null){
?? ??? ??? ???????????? mNotificationLite.closeCenter();
?? ??? ??? ?????????? }
??????????????????????? mBarIsAdd = false;
??????????????????????? if(!isMultiChange)
??????????????????????? Toast.makeText(mContext, mContext.getResources().getString(R.string.hidebar_msg)
, 1000).show();
??????????????? }
??????? }
可以看到如上加厚的狀態(tài)欄這句。將其注釋掉,即可實現(xiàn)勾選"永久隱藏工具欄"時,導(dǎo)航欄隱藏而狀態(tài)欄不隱藏。
總結(jié)
以上是生活随笔為你收集整理的Android5.1永久隐藏工具栏定制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图片码
- 下一篇: 我的XBox手柄怎么有线断连了