josepdecid
josepdecid

Reputation: 1847

Fragment layout overlaps Activity Titlebar

I have an activity, that is a Material Design Drawer, and some fragments that are called from the activity java file when an user clicks on an option of the drawer. The problem is that the fragment layout, overlaps the activity titlebar, matching all the screen, instead of being positioned inside the activity. In the AndroidStudio preview, fragment content is set correctly: enter image description here

But when I load the apk into my phone, I see something like this: enter image description here

Here is my source code: - fragment_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin">

    <EditText
        android:id="@+id/subjectSelector"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text"
        android:hint="Write subject initials"/>

    <Button
        android:id="@+id/queryButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        style="@style/Base.Widget.AppCompat.Button.Borderless"
        android:text="Search"
        android:layout_alignBottom="@+id/subjectSelector"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/subjectSelector"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <TextView
                android:id="@+id/subjectName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
            <TextView
                android:id="@+id/subjectTeachers"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
            <TextView
                android:id="@+id/subjectDescription"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
            <TextView
                android:id="@+id/subjectCredits"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

        </LinearLayout>
    </ScrollView>

</RelativeLayout>

Drawer.java

public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
    Fragment newFragment;
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    if (id == R.id.nav_timetable) {
        newFragment = new TimetableMainMenu();
    } else if (id == R.id.nav_notifications) {
        newFragment = new NotificationsMainMenu();
    } else if (id == R.id.nav_schedule) {
        newFragment = new ScheduleMainMenu();
    } else if (id == R.id.nav_class_availability) {
        newFragment = new ClassAvailabilityMainMenu();
    } else if (id == R.id.nav_subject_info) {
        newFragment = new SubjectInfoMainMenu();
    } else newFragment = null;

    if (newFragment != null) {
        transaction.replace(R.id.main_menu_fragment_container, newFragment);
        transaction.addToBackStack(null);
    } else {
        Toast.makeText(MainMenuActivity.this, "Not implemented yet", Toast.LENGTH_SHORT).show();
    }
    transaction.commit();

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

enter image description here

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.upc.fib.racopocket.MainMenuActivity">

    <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>

    <include layout="@layout/content_main_menu" />



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

How can I fix this?

Upvotes: 3

Views: 600

Answers (1)

josepdecid
josepdecid

Reputation: 1847

I got the answer, it was just a stupid thing. On the content_main_menu.xml, the frame layout is matching all the screen, so I just had to left a marginTop of actionBarSize. This is the new content_main_menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_menu_fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="?attr/actionBarSize"/>

Upvotes: 2

Related Questions