活动地址:CSDN21天学习挑战赛


1.概述

在定制化开发中,在SystemUI的一些定制功能中,针对默认去掉底部导航栏的方法有好几种,StatusBar和DisplayPolicy.java中api来默认去掉底部导航栏,设置导航栏高度也可以实现 现在就这几种方法分别实现

2.SystemUI默认去掉底部导航栏的三种方法的核心代码如下:

主要核心代码:
frameworks\base\services\core\java\com\android\server\wm\DisplayPolicy.java
frameworks\base\core\res\res\values\demins.xml
framework/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java

3.SystemUI默认去掉底部导航栏的三种方法的功能实现

3.1 第一种方法 StatusBar中实现默认去掉底部导航栏的方法

@Overridepublic void start() {mGroupManager = Dependency.get(NotificationGroupManager.class);mGroupAlertTransferHelper = Dependency.get(NotificationGroupAlertTransferHelper.class);mVisualStabilityManager = Dependency.get(VisualStabilityManager.class);mNotificationLogger = Dependency.get(NotificationLogger.class);mRemoteInputManager = Dependency.get(NotificationRemoteInputManager.class);mNotificationListener =  Dependency.get(NotificationListener.class);mNotificationListener.registerAsSystemService();mNetworkController = Dependency.get(NetworkController.class);mUserSwitcherController = Dependency.get(UserSwitcherController.class);mScreenLifecycle = Dependency.get(ScreenLifecycle.class);mScreenLifecycle.addObserver(mScreenObserver);mWakefulnessLifecycle = Dependency.get(WakefulnessLifecycle.class);mWakefulnessLifecycle.addObserver(mWakefulnessObserver);mBatteryController = Dependency.get(BatteryController.class);mDataSaverController = Dependency.get(DataSaverController.class);mAssistManager = Dependency.get(AssistManager.class);mUiModeManager = mContext.getSystemService(UiModeManager.class);mLockscreenUserManager = Dependency.get(NotificationLockscreenUserManager.class);mGutsManager = Dependency.get(NotificationGutsManager.class);mMediaManager = Dependency.get(NotificationMediaManager.class);mEntryManager = Dependency.get(NotificationEntryManager.class);mNotificationInterruptionStateProvider =Dependency.get(NotificationInterruptionStateProvider.class);mViewHierarchyManager = Dependency.get(NotificationViewHierarchyManager.class);mForegroundServiceController = Dependency.get(ForegroundServiceController.class);mAppOpsController = Dependency.get(AppOpsController.class);mZenController = Dependency.get(ZenModeController.class);mKeyguardViewMediator = getComponent(KeyguardViewMediator.class);mColorExtractor = Dependency.get(SysuiColorExtractor.class);mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class);mNavigationBarController = Dependency.get(NavigationBarController.class);mBubbleController = Dependency.get(BubbleController.class);mBubbleController.setExpandListener(mBubbleExpandListener);mActivityIntentHelper = new ActivityIntentHelper(mContext);KeyguardSliceProvider sliceProvider = KeyguardSliceProvider.getAttachedInstance();if (sliceProvider != null) {sliceProvider.initDependencies(mMediaManager, mStatusBarStateController);} else {Log.w(TAG, "Cannot init KeyguardSliceProvider dependencies");}mColorExtractor.addOnColorsChangedListener(this);mStatusBarStateController.addCallback(this,SysuiStatusBarStateController.RANK_STATUS_BAR);mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);mDreamManager = IDreamManager.Stub.asInterface(ServiceManager.checkService(DreamService.DREAM_SERVICE));/* UNISOC: Bug 1074234, 885650, Super power feature @{ */if(SprdPowerManagerUtil.SUPPORT_SUPER_POWER_SAVE){int mode = SprdPowerManagerUtil.getPowerSaveModeInternal();mPowerSaveMode = mode;curMode = mode;}/* @} */mDisplay = mWindowManager.getDefaultDisplay();mDisplayId = mDisplay.getDisplayId();updateDisplaySize();mVibrateOnOpening = mContext.getResources().getBoolean(R.bool.config_vibrateOnIconAnimation);mVibratorHelper = Dependency.get(VibratorHelper.class);DateTimeView.setReceiverHandler(Dependency.get(Dependency.TIME_TICK_HANDLER));putComponent(StatusBar.class, this);// start old BaseStatusBar.start().mWindowManagerService = WindowManagerGlobal.getWindowManagerService();mDevicePolicyManager = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);mAccessibilityManager = (AccessibilityManager)mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);mKeyguardUpdateMonitor = KeyguardUpdateMonitor.getInstance(mContext);mBarService = IStatusBarService.Stub.asInterface(ServiceManager.getService(Context.STATUS_BAR_SERVICE));mRecents = getComponent(Recents.class);mKeyguardManager = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE);// Connect in to the status bar manager servicemCommandQueue = getComponent(CommandQueue.class);mCommandQueue.addCallback(this);RegisterStatusBarResult result = null;try {result = mBarService.registerStatusBar(mCommandQueue);} catch (RemoteException ex) {ex.rethrowFromSystemServer();}createAndAddWindows(result);// Make sure we always have the most current wallpaper info.IntentFilter wallpaperChangedFilter = new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED);mContext.registerReceiverAsUser(mWallpaperChangedReceiver, UserHandle.ALL,wallpaperChangedFilter, null /* broadcastPermission */, null /* scheduler */);mWallpaperChangedReceiver.onReceive(mContext, null);// Set up the initial notification state. This needs to happen before CommandQueue.disable()setUpPresenter();setSystemUiVisibility(mDisplayId, result.mSystemUiVisibility,result.mFullscreenStackSysUiVisibility, result.mDockedStackSysUiVisibility,0xffffffff, result.mFullscreenStackBounds, result.mDockedStackBounds,result.mNavbarColorManagedByIme);// StatusBarManagerService has a back up of IME token and it's restored here.setImeWindowStatus(mDisplayId, result.mImeToken, result.mImeWindowVis,result.mImeBackDisposition, result.mShowImeSwitcher);// Set up the initial icon stateint numIcons = result.mIcons.size();for (int i = 0; i < numIcons; i++) {mCommandQueue.setIcon(result.mIcons.keyAt(i), result.mIcons.valueAt(i));}if (DEBUG) {Log.d(TAG, String.format("init: icons=%d disabled=0x%08x lights=0x%08x imeButton=0x%08x",numIcons,result.mDisabledFlags1,result.mSystemUiVisibility,result.mImeWindowVis));}IntentFilter internalFilter = new IntentFilter();internalFilter.addAction(BANNER_ACTION_CANCEL);internalFilter.addAction(BANNER_ACTION_SETUP);mContext.registerReceiver(mBannerActionBroadcastReceiver, internalFilter, PERMISSION_SELF,null);IWallpaperManager wallpaperManager = IWallpaperManager.Stub.asInterface(ServiceManager.getService(Context.WALLPAPER_SERVICE));try {wallpaperManager.setInAmbientMode(false /* ambientMode */, 0L /* duration */);} catch (RemoteException e) {// Just pass, nothing critical.}// end old BaseStatusBar.start().// Lastly, call to the icon policy to install/update all the icons.mIconPolicy = new PhoneStatusBarPolicy(mContext, mIconController);mSignalPolicy = new StatusBarSignalPolicy(mContext, mIconController);mUnlockMethodCache = UnlockMethodCache.getInstance(mContext);mUnlockMethodCache.addListener(this);startKeyguard();mKeyguardUpdateMonitor.registerCallback(mUpdateCallback);putComponent(DozeHost.class, mDozeServiceHost);mScreenPinningRequest = new ScreenPinningRequest(mContext);mFalsingManager = FalsingManagerFactory.getInstance(mContext);Dependency.get(ActivityStarterDelegate.class).setActivityStarterImpl(this);Dependency.get(ConfigurationController.class).addCallback(this);// set the initial view visibilityDependency.get(InitController.class).addPostInitTask(this::updateAreThereNotifications);int disabledFlags1 = result.mDisabledFlags1;int disabledFlags2 = result.mDisabledFlags2;Dependency.get(InitController.class).addPostInitTask(() -> setUpDisableFlags(disabledFlags1, disabledFlags2));// UNISOC: BUG 1156257 add screen resolution observer to control NavigationBarViewmContext.getContentResolver().registerContentObserver(Settings.System.getUriFor(ACTION_SR_CHANGING),false, mScreenResolutionObserver);CommonUtils.setRegionOrLongshotMode(mContext.getContentResolver(), 0);}// ================================================================================// Constructing the view// ================================================================================protected void makeStatusBarView(@Nullable RegisterStatusBarResult result) {final Context context = mContext;updateDisplaySize(); // populates mDisplayMetricsupdateResources();updateTheme();inflateStatusBarWindow(context);mStatusBarWindow.setService(this);mStatusBarWindow.setOnTouchListener(getStatusBarWindowTouchListener());// TODO: Deal with the ugliness that comes from having some of the statusbar broken out// into fragments, but the rest here, it leaves some awkward lifecycle and whatnot.mNotificationPanel = mStatusBarWindow.findViewById(R.id.notification_panel);mStackScroller = mStatusBarWindow.findViewById(R.id.notification_stack_scroller);mZenController.addCallback(this);NotificationListContainer notifListContainer = (NotificationListContainer) mStackScroller;mNotificationLogger.setUpWithContainer(notifListContainer);mNotificationIconAreaController = SystemUIFactory.getInstance().createNotificationIconAreaController(context, this, mStatusBarStateController);inflateShelf();mNotificationIconAreaController.setupShelf(mNotificationShelf);Dependency.get(DarkIconDispatcher.class).addDarkReceiver(mNotificationIconAreaController);// Allow plugins to reference DarkIconDispatcher and StatusBarStateControllerDependency.get(PluginDependencyProvider.class).allowPluginDependency(DarkIconDispatcher.class);Dependency.get(PluginDependencyProvider.class).allowPluginDependency(StatusBarStateController.class);FragmentHostManager.get(mStatusBarWindow).addTagListener(CollapsedStatusBarFragment.TAG, (tag, fragment) -> {CollapsedStatusBarFragment statusBarFragment =(CollapsedStatusBarFragment) fragment;statusBarFragment.initNotificationIconArea(mNotificationIconAreaController);PhoneStatusBarView oldStatusBarView = mStatusBarView;mStatusBarView = (PhoneStatusBarView) fragment.getView();mStatusBarView.setBar(this);mStatusBarView.setPanel(mNotificationPanel);mStatusBarView.setScrimController(mScrimController);// CollapsedStatusBarFragment re-inflated PhoneStatusBarView and both of// mStatusBarView.mExpanded and mStatusBarView.mBouncerShowing are false.// PhoneStatusBarView's new instance will set to be gone in// PanelBar.updateVisibility after calling mStatusBarView.setBouncerShowing// that will trigger PanelBar.updateVisibility. If there is a heads up showing,// it needs to notify PhoneStatusBarView's new instance to update the correct// status by calling mNotificationPanel.notifyBarPanelExpansionChanged().if (mHeadsUpManager.hasPinnedHeadsUp()) {mNotificationPanel.notifyBarPanelExpansionChanged();}mStatusBarView.setBouncerShowing(mBouncerShowing);if (oldStatusBarView != null) {float fraction = oldStatusBarView.getExpansionFraction();boolean expanded = oldStatusBarView.isExpanded();mStatusBarView.panelExpansionChanged(fraction, expanded);}HeadsUpAppearanceController oldController = mHeadsUpAppearanceController;if (mHeadsUpAppearanceController != null) {// This view is being recreated, let's destroy the old onemHeadsUpAppearanceController.destroy();}mHeadsUpAppearanceController = new HeadsUpAppearanceController(mNotificationIconAreaController, mHeadsUpManager, mStatusBarWindow);mHeadsUpAppearanceController.readFrom(oldController);mStatusBarWindow.setStatusBarView(mStatusBarView);updateAreThereNotifications();checkBarModes();}).getFragmentManager().beginTransaction().replace(R.id.status_bar_container, new CollapsedStatusBarFragment(),CollapsedStatusBarFragment.TAG).commit();mIconController = Dependency.get(StatusBarIconController.class);mHeadsUpManager = new HeadsUpManagerPhone(context, mStatusBarWindow, mGroupManager, this,mVisualStabilityManager);Dependency.get(ConfigurationController.class).addCallback(mHeadsUpManager);mHeadsUpManager.addListener(this);mHeadsUpManager.addListener(mNotificationPanel);mHeadsUpManager.addListener(mGroupManager);mHeadsUpManager.addListener(mGroupAlertTransferHelper);mHeadsUpManager.addListener(mVisualStabilityManager);mAmbientPulseManager.addListener(this);mAmbientPulseManager.addListener(mGroupManager);mAmbientPulseManager.addListener(mGroupAlertTransferHelper);mNotificationPanel.setHeadsUpManager(mHeadsUpManager);mGroupManager.setHeadsUpManager(mHeadsUpManager);mGroupAlertTransferHelper.setHeadsUpManager(mHeadsUpManager);mNotificationLogger.setHeadsUpManager(mHeadsUpManager);putComponent(HeadsUpManager.class, mHeadsUpManager);createNavigationBar(result);if (ENABLE_LOCKSCREEN_WALLPAPER) {mLockscreenWallpaper = new LockscreenWallpaper(mContext, this, mHandler);}mKeyguardIndicationController =SystemUIFactory.getInstance().createKeyguardIndicationController(mContext,mStatusBarWindow.findViewById(R.id.keyguard_indication_area),mStatusBarWindow.findViewById(R.id.lock_icon));mNotificationPanel.setKeyguardIndicationController(mKeyguardIndicationController);mAmbientIndicationContainer = mStatusBarWindow.findViewById(R.id.ambient_indication_container);// TODO: Find better place for this callback.mBatteryController.addCallback(new BatteryStateChangeCallback() {@Overridepublic void onPowerSaveChanged(boolean isPowerSave) {mHandler.post(mCheckBarModes);if (mDozeServiceHost != null) {mDozeServiceHost.firePowerSaveChanged(isPowerSave);}}@Overridepublic void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {// noop}});mAutoHideController = Dependency.get(AutoHideController.class);mAutoHideController.setStatusBar(this);mLightBarController = Dependency.get(LightBarController.class);ScrimView scrimBehind = mStatusBarWindow.findViewById(R.id.scrim_behind);ScrimView scrimInFront = mStatusBarWindow.findViewById(R.id.scrim_in_front);mScrimController = SystemUIFactory.getInstance().createScrimController(scrimBehind, scrimInFront, mLockscreenWallpaper,(state, alpha, color) -> mLightBarController.setScrimState(state, alpha, color),scrimsVisible -> {if (mStatusBarWindowController != null) {mStatusBarWindowController.setScrimsVisibility(scrimsVisible);}if (mStatusBarWindow != null) {mStatusBarWindow.onScrimVisibilityChanged(scrimsVisible);}}, DozeParameters.getInstance(mContext),mContext.getSystemService(AlarmManager.class));mNotificationPanel.initDependencies(this, mGroupManager, mNotificationShelf,mHeadsUpManager, mNotificationIconAreaController, mScrimController);mDozeScrimController = new DozeScrimController(DozeParameters.getInstance(context));BackDropView backdrop = mStatusBarWindow.findViewById(R.id.backdrop);mMediaManager.setup(backdrop, backdrop.findViewById(R.id.backdrop_front),backdrop.findViewById(R.id.backdrop_back), mScrimController, mLockscreenWallpaper);// Other iconsmVolumeComponent = getComponent(VolumeComponent.class);mNotificationPanel.setUserSetupComplete(mUserSetup);if (UserManager.get(mContext).isUserSwitcherEnabled()) {createUserSwitcher();}mNotificationPanel.setLaunchAffordanceListener(mStatusBarWindow::onShowingLaunchAffordanceChanged);// Set up the quick settings tile panelView container = mStatusBarWindow.findViewById(R.id.qs_frame);if (container != null) {FragmentHostManager fragmentHostManager = FragmentHostManager.get(container);ExtensionFragmentListener.attachExtensonToFragment(container, QS.TAG, R.id.qs_frame,Dependency.get(ExtensionController.class).newExtension(QS.class).withPlugin(QS.class).withDefault(this::createDefaultQSFragment).build());mBrightnessMirrorController = new BrightnessMirrorController(mStatusBarWindow,(visible) -> {mBrightnessMirrorVisible = visible;updateScrimController();});fragmentHostManager.addTagListener(QS.TAG, (tag, f) -> {QS qs = (QS) f;if (qs instanceof QSFragment) {mQSPanel = ((QSFragment) qs).getQsPanel();mQSPanel.setBrightnessMirror(mBrightnessMirrorController);mFooter = ((QSFragment) qs).getFooter();}});}mReportRejectedTouch = mStatusBarWindow.findViewById(R.id.report_rejected_touch);if (mReportRejectedTouch != null) {updateReportRejectedTouchVisibility();mReportRejectedTouch.setOnClickListener(v -> {Uri session = mFalsingManager.reportRejectedTouch();if (session == null) { return; }StringWriter message = new StringWriter();message.write("Build info: ");message.write(SystemProperties.get("ro.build.description"));message.write("\nSerial number: ");message.write(SystemProperties.get("ro.serialno"));message.write("\n");PrintWriter falsingPw = new PrintWriter(message);FalsingLog.dump(falsingPw);falsingPw.flush();startActivityDismissingKeyguard(Intent.createChooser(new Intent(Intent.ACTION_SEND).setType("*/*").putExtra(Intent.EXTRA_SUBJECT, "Rejected touch report").putExtra(Intent.EXTRA_STREAM, session).putExtra(Intent.EXTRA_TEXT, message.toString()),"Share rejected touch report").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK),true /* onlyProvisioned */, true /* dismissShade */);});}PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);if (!pm.isScreenOn()) {mBroadcastReceiver.onReceive(mContext, new Intent(Intent.ACTION_SCREEN_OFF));}mGestureWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,"GestureWakeLock");mVibrator = mContext.getSystemService(Vibrator.class);int[] pattern = mContext.getResources().getIntArray(R.array.config_cameraLaunchGestureVibePattern);mCameraLaunchGestureVibePattern = new long[pattern.length];for (int i = 0; i < pattern.length; i++) {mCameraLaunchGestureVibePattern[i] = pattern[i];}// receive broadcastsIntentFilter filter = new IntentFilter();filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);filter.addAction(Intent.ACTION_SCREEN_OFF);filter.addAction(DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG);/* UNISOC: Bug 1074234, 885650, Super power feature @{ */if(SprdPowerManagerUtil.SUPPORT_SUPER_POWER_SAVE){filter.addAction(SprdPowerManagerUtil.ACTION_POWEREX_SAVE_MODE_CHANGED);}/* @} */context.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, filter, null, null);IntentFilter demoFilter = new IntentFilter();if (DEBUG_MEDIA_FAKE_ARTWORK) {demoFilter.addAction(ACTION_FAKE_ARTWORK);}demoFilter.addAction(ACTION_DEMO);context.registerReceiverAsUser(mDemoReceiver, UserHandle.ALL, demoFilter,android.Manifest.permission.DUMP, null);// listen for USER_SETUP_COMPLETE setting (per-user)mDeviceProvisionedController.addCallback(mUserSetupObserver);mUserSetupObserver.onUserSetupChanged();// disable profiling bars, since they overlap and clutter the output on app windowsThreadedRenderer.overrideProperty("disableProfileBars", "true");// Private API call to make the shadows look better for RecentsThreadedRenderer.overrideProperty("ambientRatio", String.valueOf(1.5f));/* UNISOC: Bug 1074234, 885650, Super power feature @{ */if(SprdPowerManagerUtil.SUPPORT_SUPER_POWER_SAVE && mNotificationPanel != null){int mode = SprdPowerManagerUtil.getPowerSaveModeInternal();if(mFooter != null){mFooter.setPowerSaveMode(mode);}if(mQSPanel != null){mQSPanel.setPowerSaveMode(mode);}if (mNotificationPanel != null){mNotificationPanel.setPowerSaveMode(mode);}/* UNISOC: Modify for bug974161 {@ */mNavigationBarController.setPowerSaveMode(mode);/* @} */}/* @} *//* UNISOC: Bug 1104465 add for screen pinning @{ */mScreenPinningNotify = new ScreenPinningNotify(mContext);/* @} */}在makeStatusBarView(@Nullable RegisterStatusBarResult result)中的 createNavigationBar(result); 就是加载导航栏  直接注释掉就可以了

3.2 在DisplayPolicy.java中去掉底部导航栏的方法

 public boolean hasNavigationBar() {return mHasNavigationBar;}/*** Return the display height available after excluding any screen* decorations that could never be removed in Honeycomb. That is, system bar or* button bar.*/public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode,DisplayCutout displayCutout) {int height = fullHeight;if (hasNavigationBar()) {final int navBarPosition = navigationBarPosition(fullWidth, fullHeight, rotation);if (navBarPosition == NAV_BAR_BOTTOM) {height -= getNavigationBarHeight(rotation, uiMode);}}if (displayCutout != null) {height -= displayCutout.getSafeInsetTop() + displayCutout.getSafeInsetBottom();}return height;}/*** Return the display width available after excluding any screen* decorations that could never be removed in Honeycomb. That is, system bar or* button bar.*/public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode,DisplayCutout displayCutout) {int width = fullWidth;if (hasNavigationBar()) {final int navBarPosition = navigationBarPosition(fullWidth, fullHeight, rotation);if (navBarPosition == NAV_BAR_LEFT || navBarPosition == NAV_BAR_RIGHT) {width -= getNavigationBarWidth(rotation, uiMode);}}if (displayCutout != null) {width -= displayCutout.getSafeInsetLeft() + displayCutout.getSafeInsetRight();}return width;}根据hasNavigationBar()判断是否有导航栏来就是显示屏幕宽度和高度所以修改为:public boolean hasNavigationBar() {-  return mHasNavigationBar;+ return false;}

3.3 第三种默认隐藏导航栏方法

设置导航栏高度为0
路径:frameworks\base\core\res\res\values\demins.xml
<dimen name="navigation_bar_height">48dp</dimen>
navigation_bar_height 导航栏高度设置为0

学习链接

21天学习之二(Android 10.0 SystemUI默认去掉底部导航栏的三种方法)相关推荐

  1. 转载:Android底部导航栏,三种风格和实现

    原文出处 标题:Android底部导航栏,三种风格和实现 作者:阿飞__ 原文链接:Android底部导航栏,三种风格和实现_阿飞__的博客-CSDN博客_android导航栏 一.效果图展示 如果动 ...

  2. Android底部导航栏的三种风格实现

    一.效果图展示 如果动图没有动的话,也可以看下面这个静态图 以下挨个分析每个的实现,这里只做简单的效果展示,大家可以基于目前代码做二次开发. 二.BottomNavigationView 这是 Goo ...

  3. Android底部导航栏,三种风格和实现

    一.效果图展示 如果动图没有动的话,也可以看下面这个静态图 以下挨个分析每个的实现,这里只做简单的效果展示,大家可以基于目前代码做二次开发. 二.BottomNavigationView 这是 Goo ...

  4. 转载:Android (争取做到)最全的底部导航栏实现方法

    原文出处 标题:Android (争取做到)最全的底部导航栏实现方法 作者:野狼谷 原文链接:Android (争取做到)最全的底部导航栏实现方法 - 野狼谷 - 博客园 前言 本文(争取做到)And ...

  5. Android底部导航栏的四种实现

    现在大多数App都会用到底部导航栏,比如常见的聊天工具QQ.微信,购物App等等,有了底部导航栏,用户可以随时切换界面,查看不同的内容.它的实现方式也很多,以前大多使用TabHost来实现,但是现在我 ...

  6. 关于Android系统隐藏导航栏的两种方法

    关于Android系统隐藏导航栏的两种方法 在NXP的imx6q和全志的A40I上试过 1.frameworks/base/core/res/res/values/dimens.xml中修改 < ...

  7. android底部导航栏软件,三步搞定android应用底部导航栏

    很多android应用底部都有一个底部导航栏,方便用户在使用过程中随意切换.目前常用的做法有三种:一种是使用自定义tabHost,一种是使用activityGroup,一种是结合FrameLayout ...

  8. Android开发:隐藏和显示底部导航栏

    描述:视频播放器实现全屏和小屏互相切换时,显示和隐藏底部导航栏的方法 该例子设置的Activity是去除状态栏和标题栏,全屏显示布局和电量等信息.Manifest文件 theme如下: <act ...

  9. Android 10.0 SystemUI设置QSPanel和QuickQsPanel的高度

    1.概述 在10.0的定制SystemUI下拉状态栏UI的时候,要求下拉展开QuickQsPanel,和展开通知栏 就是说一次下拉就要展开QuickQsPanel 不需要二次展开QsPanel 所以就 ...

最新文章

  1. C++ 中vector的学习
  2. Redis 命令--Redis有序集合(sorted set)
  3. java删除javaee_JavaEE--集合--删除List中指定元素
  4. 更新T1表,要添加一个条件A,但T1表没有A字段
  5. Dxg——C++ 开发笔记整理分类合集【所有的相关记录,都整理在此】
  6. 使用NFC读卡器模拟加密门禁卡方法,包含小米手环
  7. 瑞星网络版防病毒软件For Linux通过银河麒麟产品兼容性测试
  8. mysql支持3条用来创建循环的语句_MySql学习笔记——存储过程
  9. 入门 | S3C2440启动过程分析
  10. Windows网络重置后wifi功能丢失解决方案
  11. connection closed
  12. 【python学习笔记】python运算符以及简单语句
  13. python在化工模拟中的应用_python完成模拟博客园登陆
  14. Thinkpad 笔记本电源状态指示灯
  15. 如何进行手机投屏设置,屏幕传输达到最快速度
  16. bigmap 绘制三维地形图_3D-MAX真实三维地形制作过程
  17. 应届生找工作到哪里找
  18. 传统的机器学习目标检测和深度学习的目标检测
  19. strace常用选项instance
  20. 2023最新开源版ChatGPT3.5小程序源码无需服务器搭建+用阿里云函数搭建

热门文章

  1. 2021好看小说推荐(持续更新中)
  2. 苏世民,我的经验和教训(五)
  3. 计算机组成原理、操作系统、数据结构和计算机网络融会贯通
  4. 知识工程重点知识介绍-1
  5. Spring Framework框架起步,小白都看得懂(官翻版)!
  6. 正则表达式(规则+代码)
  7. 第一款个人应用——《不做手机控》——终于上线啦!
  8. python能开发小程序吗_微信小程序用什么语言开发?Python能开发小程序么
  9. Microsoft SQL Server Reporting Services 初探
  10. php中errorreporting,php中error_reporting函数用法详解_PHP教程