diff --git a/api/current.txt b/api/current.txt
index e909181..01925e7 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -6435,6 +6435,8 @@
}
public class StatusBarManager {
+ method public void addNavigationBar();
+ method public void removeNavigationBar();
}
public final class SyncNotedAppOp implements android.os.Parcelable {
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index b8734c2..6431a20 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -1613,8 +1613,6 @@
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE
);
@@ -3497,8 +3495,6 @@
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE
);
@@ -3530,8 +3526,6 @@
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE
);
@@ -3559,8 +3553,6 @@
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE
);
diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java
index 1329fa4..2d957d4 100644
--- a/core/java/android/app/StatusBarManager.java
+++ b/core/java/android/app/StatusBarManager.java
@@ -440,6 +440,28 @@
}
}
+ public void addNavigationBar() {
+ try {
+ final IStatusBarService svc = getService();
+ if (svc != null) {
+ svc.addNavigationBar();
+ }
+ } catch (RemoteException ex) {
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
+ public void removeNavigationBar() {
+ try {
+ final IStatusBarService svc = getService();
+ if (svc != null) {
+ svc.removeNavigationBar();
+ }
+ } catch (RemoteException ex) {
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
/** @hide */
public static String windowStateToString(int state) {
if (state == WINDOW_STATE_HIDING) return "WINDOW_STATE_HIDING";
diff --git a/core/java/com/android/internal/app/WindowDecorActionBar.java b/core/java/com/android/internal/app/WindowDecorActionBar.java
index 0cd1202..6e9dc4c9 100644
--- a/core/java/com/android/internal/app/WindowDecorActionBar.java
+++ b/core/java/com/android/internal/app/WindowDecorActionBar.java
@@ -130,15 +130,17 @@
final AnimatorListener mHideListener = new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
- if (mContentAnimations && mContentView != null) {
+ if (mContentAnimations && mContentView != null && mContainerView != null) {
mContentView.setTranslationY(0);
mContainerView.setTranslationY(0);
}
if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) {
mSplitView.setVisibility(View.GONE);
}
- mContainerView.setVisibility(View.GONE);
- mContainerView.setTransitioning(false);
+ if (mContainerView != null) {
+ mContainerView.setVisibility(View.GONE);
+ mContainerView.setTransitioning(false);
+ }
mCurrentShowAnim = null;
completeDeferredDestroyActionMode();
if (mOverlayLayout != null) {
@@ -151,7 +153,9 @@
@Override
public void onAnimationEnd(Animator animation) {
mCurrentShowAnim = null;
- mContainerView.requestLayout();
+ if (mContainerView != null) {
+ mContainerView.requestLayout();
+ }
}
};
@@ -159,8 +163,10 @@
new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
- final ViewParent parent = mContainerView.getParent();
- ((View) parent).invalidate();
+ if (mContainerView != null) {
+ final ViewParent parent = mContainerView.getParent();
+ ((View) parent).invalidate();
+ }
}
动态隐藏导航栏
最新推荐文章于 2023-06-04 10:37:03 发布
这篇博客介绍了Android中如何动态地添加和移除导航栏。通过对`StatusBarManager`类的`addNavigationBar()`和`removeNavigationBar()`方法的实现,开发者可以控制导航栏的显示与隐藏。相关代码修改涉及`Activity`、`StatusBarManager`、`StatusBar`等多个组件,展示了Android UI交互的实现细节。
摘要由CSDN通过智能技术生成