Макет контейнера фрагментов, перекрывающий основное содержимое действия

Я пытаюсь добавить пользовательский заголовок в мое основное действие, которое уже содержит Нижний навигатор и framelayoutкоторый действует как контейнер для fragmentsтого, что я хочу отобразить.

Приведенный ниже код содержит ALinearlayout["@+id/application_header], который должен выступать в качестве заголовка приложения, однако заголовок отображается путем fragment container[@+id/main_container]перекрытия заголовка.

Попробовал свойстваandroid:layout_below, android:layout_aboveно они все еще перекрываются.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 


android_id="@+id/activity_main"
android_layout_width="match_parent"
android_layout_height="match_parent"
tools_context="com.amplitude.tron.volksradio.MainActivity">

<LinearLayout
        android_id="@+id/application_header"
        android_layout_width="match_parent"
        android_layout_height="50dp"
        android_orientation="horizontal"
        android_gravity="center_horizontal">

        <TextView
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_text="RADIO"
            android_layout_gravity="center"/>
    </LinearLayout>

    <FrameLayout
        android_id="@+id/main_container"
        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_layout_below="@+id/application_header"
        android_layout_above="@+id/bottomNavigationBar"
        android_layout_alignParentTop="true">
    </FrameLayout>

    <android.support.design.widget.BottomNavigationView
        android_id="@+id/bottomNavigationBar"
        android_layout_width="match_parent"
        android_layout_height="wrap_content"
        android_layout_alignParentBottom="true"
        design_menu="@menu/bottom_menu_navigation"
        android_background="#50b1b5b9">

    </android.support.design.widget.BottomNavigationView>

</RelativeLayout>

4 ответа

  1. <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 
          android_orientation="vertical"
          android_layout_width="match_parent"
          android_layout_height="match_parent">
         <LinearLayout
              android_id="@+id/application_header"
              android_layout_width="match_parent"
              android_layout_height="50dp"
              android_orientation="horizontal"
              android_gravity="center_horizontal">
    
         <TextView
              android_layout_width="wrap_content"
              android_layout_height="wrap_content"
              android_text="RADIO"
              android_layout_gravity="center"/>
         </LinearLayout>
    
         <FrameLayout
              android_id="@+id/main_container"
              android_layout_width="match_parent"
              android_layout_height="match_parent"
              android_layout_below="@+id/application_header"
              android_layout_above="@+id/bottomNavigationBar"
              android_layout_alignParentTop="true">
         </FrameLayout>
    
         <android.support.design.widget.BottomNavigationView
              android_id="@+id/bottomNavigationBar"
              android_layout_width="match_parent"
              android_layout_height="wrap_content"
              android_layout_alignParentBottom="true"
              design_menu="@menu/bottom_menu_navigation"
              android_background="#50b1b5b9">
        </android.support.design.widget.BottomNavigationView>
    </LinearLayout>
    
  2. android:layout_below и android:layout_aboveработать с RelativeLayout. Кстати, LinearLayoutс только одним TextViewявляется избыточным. Вы можете просто использовать TextView. Вот несколько вариантов, как это сделать.

    Использование RelativeLayout:

    <RelativeLayout
        
        
        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_orientation="vertical">
    
        <LinearLayout
            android_id="@+id/application_header"
            android_layout_width="match_parent"
            android_layout_height="50dp">
            <TextView
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"
                android_layout_gravity="center"
                android_text="RADIO"/>
        </LinearLayout>
    
        <FrameLayout
            android_id="@+id/main_container"
            android_layout_width="match_parent"
            android_layout_height="match_parent"
            android_layout_above="@+id/bottomNavigationBar"
            android_layout_alignParentTop="true"
            android_layout_below="@id/application_header">
        </FrameLayout>
    
        <android.support.design.widget.BottomNavigationView
            android_id="@+id/bottomNavigationBar"
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            android_layout_alignParentBottom="true"
            android_background="#50b1b5b9"
            design_menu="@menu/bottom_menu_navigation">
    
        </android.support.design.widget.BottomNavigationView>
    </RelativeLayout>
    

    Использование LinearLayout:

     <LinearLayout
        
        
        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_orientation="vertical">
    
        <LinearLayout
            android_id="@+id/application_header"
            android_layout_width="match_parent"
            android_layout_height="50dp">
            <TextView
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"
                android_layout_gravity="center"
                android_text="RADIO"/>
        </LinearLayout>
    
        <FrameLayout
            android_id="@+id/main_container"
            android_layout_width="match_parent"
            android_layout_height="match_parent">
        </FrameLayout>
    
        <android.support.design.widget.BottomNavigationView
            android_id="@+id/bottomNavigationBar"
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            android_layout_gravity="bottom"
            android_background="#50b1b5b9"
            design_menu="@menu/bottom_menu_navigation">
    
        </android.support.design.widget.BottomNavigationView>
    </LinearLayout>
    

    Еще одна (лучшая) альтернатива будет использовать CoordinatorLayoutс Toolbar:

    <android.support.design.widget.CoordinatorLayout
        android_layout_width="match_parent"
        android_layout_height="match_parent"
        
        
        >
    
        <android.support.design.widget.AppBarLayout
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            android_theme="@style/AppTheme.AppBarOverlay">
    
            <android.support.v7.widget.Toolbar
                android_id="@+id/toolbar"
                android_layout_width="match_parent"
                android_layout_height="?attr/actionBarSize"
                android_background="?attr/colorPrimary"
                app_popupTheme="@style/AppTheme.PopupOverlay"/>
    
        </android.support.design.widget.AppBarLayout>
    
        <FrameLayout
            android_id="@+id/main_container"
            android_layout_width="match_parent"
            android_layout_height="match_parent"
            android_layout_below="@+id/application_header"
            android_layout_above="@+id/bottomNavigationBar"
            android_layout_alignParentTop="true"
            app_layout_behavior="@string/appbar_scrolling_view_behavior"/>
    
        <android.support.design.widget.BottomNavigationView
            android_id="@+id/bottomNavigationBar"
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            android_layout_gravity="bottom"
            design_menu="@menu/bottom_menu_navigation"
            android_background="#50b1b5b9"/>
    
    </android.support.design.widget.CoordinatorLayout>
    
  3. Решил его я, хотя могло бы быть другое чистое решение и было бы принято в качестве ответа, если это возможно.

    Я только что добавилandroid:layout_marginTop="50dp", который такой же, как высота элемента с идентификатором — @+id/application_header

    PS-i don’t know if this would effect screens with different size and my testing device is only 5.5 inches to which the solution worked perfectly.

  4. Вы также можете сделать центр выравнивания макета экрана, добавив Это :

    android:layout_centerInParent="true"
    

    также добавьте заполнение или маржу в случае любого небольшого количества перекрытия