BottomNavigationBar underneath NavBar

后端 未结 3 422

The Goal:

1) Make the status bar transparent - Done

2) Make the BottomNavigationView and the Navbar

相关标签:
3条回答
  • 2020-12-11 02:40

    BottomNavigationBar underneath NavBar

    The reason your BottomNavigationView hiding behind NavBar because your are setting this flags

    w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, 
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    

    SEE the result using that flags

    SIMPLE SOLUTION

    To make your statusbar transparent just use <item name="colorPrimaryDark">@android:color/transparent</item>

    and use below flags

     getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
     getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    

    Root layout

    You need to use android.support.design.widget.CoordinatorLayout as your rootlayout

    CartActivity

    public class CartActivity extends AppCompatActivity {
    
        BottomNavigationView bottomNavigationView;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            } else {
    
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            }
    
            setContentView(R.layout.activity_cart);
    
            bottomNavigationView = findViewById(R.id.tab_layout);
    
    
        }
    
    }
    

    layout.activity_cart

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/constraintLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#199bd2"
        android:fitsSystemWindows="true">
    
    
        <android.support.design.widget.BottomNavigationView
            android:id="@+id/tab_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_gravity="bottom"
            android:background="#000"
            app:itemIconTint="#FFFFFF"
            app:itemTextColor="#FFFFFF"
            app:menu="@menu/bottom_navigation_main" />
    
    
    </android.support.design.widget.CoordinatorLayout>
    

    CustAppTheme2

    <style name="CustAppTheme2" parent="Theme.AppCompat.DayNight.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@android:color/transparent</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="colorControlNormal">#FFFFFF</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:windowTranslucentNavigation">false</item>
        <item name="android:navigationBarColor">#000</item>
    
    </style>
    

    Finally OUTPUT

    Finally OUTPUT on kitkat

    0 讨论(0)
  • 2020-12-11 02:41

    How would I make the TOP of the layout go underneath the statusbar?

    Add this to root layout of each activity you need:

    android:fitsSystemWindows="true"
    

    BottomNavigationView falls underneath the NavBar

    I don't know if you can find a way to handle this as long as you keep using FLAG_LAYOUT_NO_LIMITS. If you still want to use it, you may try to check if device has a NavigationBar and calculate its height which you can give to BottomNavigationView as a bottom margin.

    To do that you can find some useful methods in this SO answer. Add another method like:

    public void setMargin(int height){
        ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mBottomNavigationView.getLayoutParams();
        params.bottomMargin = height;
    }
    

    And in onCreate(), get the height of the NavigationBar if it exists and setMargin of BottomNavigationView:

    int bottomNavHeight = getNavigationBarSize(this).y;
    if( bottomNavHeight > 0){
             setMargin(bottomNavHeight);
    }
    

    Result will be like:

    0 讨论(0)
  • 2020-12-11 02:59

    I haven't tested this code but, most probably it should work

     if (Build.VERSION.SDK_INT >= 21) {
        setWindowFlag(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
                | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, false);
        getWindow().setStatusBarColor(Color.TRANSPARENT);
        getWindow().setNavigationBarColor(Color.TRANSPARENT);
    }
    

    The code you have added allows the window to extend outside the actual output area.So. most probably that is allowing your activity to come beneath system widgets that is status bar and nav bar and giving them a transparent look.

    Try to remove the code you mentioned from java activity and replace it with mine. I hope it helps.

    0 讨论(0)
提交回复
热议问题