Skip to content

Commit 4d595f7

Browse files
committed
Better fix for toast bar and safe areas
This time tested with iOS and Android #3952
1 parent acfea09 commit 4d595f7

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

CodenameOne/src/com/codename1/components/ToastBar.java

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import com.codename1.ui.events.ActionEvent;
4242
import com.codename1.ui.events.ActionListener;
4343
import com.codename1.ui.geom.Dimension;
44+
import com.codename1.ui.geom.Rectangle;
4445
import com.codename1.ui.layouts.BorderLayout;
4546
import com.codename1.ui.plaf.Style;
4647
import com.codename1.ui.plaf.UIManager;
@@ -713,7 +714,6 @@ public ToastBarComponent() {
713714
this.getAllStyles().setBgColor(0x0);
714715
this.getAllStyles().setBackgroundType(Style.BACKGROUND_NONE);
715716
this.getAllStyles().setBgTransparency(128);
716-
setSafeArea(true);
717717
setVisible(false);
718718
label = new TextArea();
719719
label.setUIID(defaultMessageUIID);
@@ -835,18 +835,33 @@ private ToastBarComponent getToastBarComponent(boolean create) {
835835
c.hidden = true;
836836
f.putClientProperty("ToastBarComponent", c);
837837
Container layered = getLayeredPane();
838-
// Mark the ToastBar overlay container as a safe area so it respects
839-
// device notches/system bars (e.g. Android navigation, iPhone notch).
840-
layered.setSafeArea(true);
841838
layered.setLayout(new BorderLayout());
842839
layered.addComponent(position==Component.TOP ? BorderLayout.NORTH : BorderLayout.SOUTH, c);
843840
updateStatus();
844841
}
845-
if(position == Component.BOTTOM && f.getInvisibleAreaUnderVKB() > 0) {
846-
Style s = c.getAllStyles();
847-
s.setMarginUnit(Style.UNIT_TYPE_PIXELS);
848-
s.setMarginBottom(f.getInvisibleAreaUnderVKB());
842+
Rectangle safeArea = Display.getInstance().getDisplaySafeArea(new Rectangle(0, 0, 0, 0));
843+
if(position == Component.BOTTOM) {
844+
if (f.getInvisibleAreaUnderVKB() > 0) {
845+
Style s = c.getAllStyles();
846+
s.setMarginUnit(Style.UNIT_TYPE_PIXELS);
847+
s.setMarginBottom(f.getInvisibleAreaUnderVKB());
848+
}
849+
int safeBottomMargin = Display.getInstance().getDisplayHeight()
850+
- safeArea.getY()
851+
- safeArea.getHeight();
852+
if (0 < safeBottomMargin) {
853+
Style s = c.getAllStyles();
854+
s.setPaddingUnit(Style.UNIT_TYPE_PIXELS);
855+
s.setPaddingBottom(safeBottomMargin);
856+
}
857+
} else if (position == Component.TOP) {
858+
if (safeArea.getY() > 0) {
859+
Style s = c.getAllStyles();
860+
s.setPaddingUnit(Style.UNIT_TYPE_PIXELS);
861+
s.setPaddingTop(safeArea.getY());
862+
}
849863
}
864+
850865
return c;
851866
}
852867
return null;

0 commit comments

Comments
 (0)