Reputation: 1847
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:
But when I load the apk into my phone, I see something like this:
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;
}
<?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>
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" />
How can I fix this?
Upvotes: 3
Views: 600
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