From e11a26bd6dd06e2c2127ac68475a903a308ce675 Mon Sep 17 00:00:00 2001 From: "pengfei.zhou" Date: Thu, 27 Feb 2020 18:38:44 +0800 Subject: [PATCH] android:fix navbar setHidden cause bottombar translucent --- doric-android/doric/build.gradle | 2 +- .../pub/doric/navbar/BaseDoricNavBar.java | 22 +- doric-demo/src/NavbarDemo.ts | 262 +++++++++--------- 3 files changed, 152 insertions(+), 134 deletions(-) diff --git a/doric-android/doric/build.gradle b/doric-android/doric/build.gradle index e64578cf..ed1ca4d1 100644 --- a/doric-android/doric/build.gradle +++ b/doric-android/doric/build.gradle @@ -29,7 +29,7 @@ android { } afterEvaluate { - //buildJSBundle.exec() + buildJSBundle.exec() } task buildJSBundle(type: Exec) { diff --git a/doric-android/doric/src/main/java/pub/doric/navbar/BaseDoricNavBar.java b/doric-android/doric/src/main/java/pub/doric/navbar/BaseDoricNavBar.java index e2580df7..e458ba3f 100644 --- a/doric-android/doric/src/main/java/pub/doric/navbar/BaseDoricNavBar.java +++ b/doric-android/doric/src/main/java/pub/doric/navbar/BaseDoricNavBar.java @@ -25,6 +25,7 @@ import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.Window; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.TextView; @@ -32,7 +33,6 @@ import android.widget.TextView; import androidx.annotation.AttrRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; import pub.doric.R; @@ -88,15 +88,27 @@ public class BaseDoricNavBar extends FrameLayout implements IDoricNavBar { @Override public void setHidden(boolean b) { setVisibility(b ? GONE : VISIBLE); - AppCompatActivity activity = (AppCompatActivity) getContext(); + Activity activity = (Activity) getContext(); + Window window = activity.getWindow(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if (b) { - activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); + window.getDecorView().setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | SYSTEM_UI_FLAG_LAYOUT_STABLE); + + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - activity.getWindow().setStatusBarColor(Color.TRANSPARENT); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(Color.TRANSPARENT); } } else { - activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); + int visibility = window.getDecorView().getSystemUiVisibility(); + visibility = visibility ^ (SYSTEM_UI_FLAG_LAYOUT_STABLE | SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); + window.getDecorView().setSystemUiVisibility(visibility); + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + window.clearFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + } } } } diff --git a/doric-demo/src/NavbarDemo.ts b/doric-demo/src/NavbarDemo.ts index 33376e5c..522d63f4 100644 --- a/doric-demo/src/NavbarDemo.ts +++ b/doric-demo/src/NavbarDemo.ts @@ -6,133 +6,139 @@ const shareIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAMAAAD @Entry class NavbarDemo extends Panel { build(rootView: Group): void { - scroller(vlayout([ - title("Navbar Demo"), - label('isHidden').apply({ - width: 200, - height: 50, - backgroundColor: colors[0], - textSize: 30, - textColor: Color.WHITE, - layoutConfig: layoutConfig().just(), - onClick: () => { - navbar(context).isHidden().then(e => modal(context).alert(`Navbar isHidden:${e}`)).catch(e => { - modal(context).alert(e) - }) - } - } as IText), - label('setHidden').apply({ - width: 200, - height: 50, - backgroundColor: colors[0], - textSize: 30, - textColor: Color.WHITE, - layoutConfig: layoutConfig().just(), - onClick: () => { - navbar(context).isHidden() - .then(e => navbar(context).setHidden(!e)) - .catch(e => { - modal(context).alert(e) - }) - } - } as IText), - label('setTitle').apply({ - width: 200, - height: 50, - backgroundColor: colors[0], - textSize: 30, - textColor: Color.WHITE, - layoutConfig: layoutConfig().just(), - onClick: () => { - navbar(context).setTitle('Setted Title') - .catch(e => { - modal(context).alert(e) - }) - } - } as IText), - label('setBgColor').apply({ - width: 200, - height: 50, - backgroundColor: colors[0], - textSize: 30, - textColor: Color.WHITE, - layoutConfig: layoutConfig().just(), - onClick: () => { - navbar(context).setBgColor(Color.YELLOW) - .catch(e => { - modal(context).alert(e) - }) - } - } as IText), - label('setLeft').apply({ - width: 200, - height: 50, - backgroundColor: colors[0], - textSize: 30, - textColor: Color.WHITE, - layoutConfig: layoutConfig().just(), - onClick: () => { - navbar(context).setLeft(text({ - width: 70, - height: 44, - textColor: Color.BLACK, - layoutConfig: layoutConfig().just().configAlignment(Gravity.Center), - text: "Left", - })) - .catch(e => { - modal(context).alert(e) - }) - } - } as IText), - label('setRight').apply({ - width: 200, - height: 50, - backgroundColor: colors[0], - textSize: 30, - textColor: Color.WHITE, - layoutConfig: layoutConfig().just(), - onClick: () => { - navbar(context).setRight(hlayout([ - text({ - width: 70, - height: 44, - textColor: Color.BLACK, - layoutConfig: layoutConfig().just().configAlignment(Gravity.Center), - text: "Right", - }), - image({ - imageBase64: shareIcon - }).apply({ - layoutConfig: layoutConfig().just().configAlignment(gravity().centerY()), - width: 33, - height: 33, - onClick: () => { - modal(context).toast('Right Clicked', Gravity.Bottom) - } - }) - ])) - .catch(e => { - modal(context).alert(e) - }) - } - } as IText), - label('Pop').apply({ - width: 200, - height: 50, - backgroundColor: colors[0], - textSize: 30, - textColor: Color.WHITE, - layoutConfig: layoutConfig().just(), - onClick: () => { - navigator(context).pop() - } - } as IText), - ]).apply({ - layoutConfig: layoutConfig().most().configHeight(LayoutSpec.FIT), - gravity: gravity().center(), - space: 10, - } as IVLayout)).apply({ - layoutConfig: layoutConfig().most(), - }).in(rootView) + scroller( + vlayout( + [ + title("Navbar Demo"), + label('isHidden').apply({ + width: 200, + height: 50, + backgroundColor: colors[0], + textSize: 30, + textColor: Color.WHITE, + layoutConfig: layoutConfig().just(), + onClick: () => { + navbar(context).isHidden().then(e => modal(context).alert(`Navbar isHidden:${e}`)).catch(e => { + modal(context).alert(e) + }) + } + } as IText), + label('setHidden').apply({ + width: 200, + height: 50, + backgroundColor: colors[0], + textSize: 30, + textColor: Color.WHITE, + layoutConfig: layoutConfig().just(), + onClick: () => { + navbar(context).isHidden() + .then(e => navbar(context).setHidden(!e)) + .catch(e => { + modal(context).alert(e) + }) + } + } as IText), + label('setTitle').apply({ + width: 200, + height: 50, + backgroundColor: colors[0], + textSize: 30, + textColor: Color.WHITE, + layoutConfig: layoutConfig().just(), + onClick: () => { + navbar(context).setTitle('Setted Title') + .catch(e => { + modal(context).alert(e) + }) + } + } as IText), + label('setBgColor').apply({ + width: 200, + height: 50, + backgroundColor: colors[0], + textSize: 30, + textColor: Color.WHITE, + layoutConfig: layoutConfig().just(), + onClick: () => { + navbar(context).setBgColor(Color.YELLOW) + .catch(e => { + modal(context).alert(e) + }) + } + } as IText), + label('setLeft').apply({ + width: 200, + height: 50, + backgroundColor: colors[0], + textSize: 30, + textColor: Color.WHITE, + layoutConfig: layoutConfig().just(), + onClick: () => { + navbar(context).setLeft(text({ + width: 70, + height: 44, + textColor: Color.BLACK, + layoutConfig: layoutConfig().just().configAlignment(Gravity.Center), + text: "Left", + })) + .catch(e => { + modal(context).alert(e) + }) + } + } as IText), + label('setRight').apply({ + width: 200, + height: 50, + backgroundColor: colors[0], + textSize: 30, + textColor: Color.WHITE, + layoutConfig: layoutConfig().just(), + onClick: () => { + navbar(context).setRight(hlayout([ + text({ + width: 70, + height: 44, + textColor: Color.BLACK, + layoutConfig: layoutConfig().just().configAlignment(Gravity.Center), + text: "Right", + }), + image({ + imageBase64: shareIcon + }).apply({ + layoutConfig: layoutConfig().just().configAlignment(gravity().centerY()), + width: 33, + height: 33, + onClick: () => { + modal(context).toast('Right Clicked', Gravity.Bottom) + } + }) + ])) + .catch(e => { + modal(context).alert(e) + }) + } + } as IText), + label('Pop').apply({ + width: 200, + height: 50, + backgroundColor: colors[0], + textSize: 30, + textColor: Color.WHITE, + layoutConfig: layoutConfig().just(), + onClick: () => { + navigator(context).pop() + } + } as IText), + ], + { + layoutConfig: layoutConfig().most().configHeight(LayoutSpec.FIT), + gravity: gravity().center(), + space: 10, + }), + { + layoutConfig: layoutConfig().most(), + backgroundColor: Color.BLUE, + } + ).in(rootView) } } \ No newline at end of file