主要活动中的片段代码不会填满整个屏幕

时间:2016-11-14 21:26:39

标签: android android-layout android-fragments

我在主类中遇到了FragmentLayout的问题。我有应用程序的位置,在我的主要活动是地图(谷歌API),我有一个菜单,FragmentLayout(在我的主要活动XML中)是wrap_content(高度),当我点击设置,FragmentLayout显示但它不覆盖整个屏幕只是一个部分,在设置下我看到地图(不应该在那里)。当我为FragmentLaout设置match_parent时,我从主要活动中看不到地图。 这是我的代码:

 <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context="com.globallogic.cityguide.MainActivity"
    android:id="@+id/mainLayout"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include layout="@layout/navigation_action"
            android:layout_height="wrap_content"
            android:layout_width="match_parent" />
// THIS IS MY FRAGMENTS:
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" //here is this option which cover my whole screen when i put there match_parent
            android:id="@+id/main_container"
            android:layout_gravity="center"
            >
        </FrameLayout>

        <include layout="@layout/activity_outdoor_map"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>

    <android.support.design.widget.NavigationView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/navigation_view"
        app:menu="@menu/navigation_menu"
        app:headerLayout="@layout/navigation_action"
        android:layout_gravity="start"

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

</android.support.v4.widget.DrawerLayout>

enter image description here

2 个答案:

答案 0 :(得分:0)

您正在使用不同的容器,而为此目的,您可能更愿意只使用一个主容器(如xml所说)并替换其中的碎片。

这样您就可以将FrameLayout设置为适合整个屏幕,只需在必要时替换Fragment和Map片段。

因此,应在MainActivity中更改代码。 假设您的MainActivity已经扩展了AppCompatActivity,我们有一个mapFragment实例,那么您首先要加载Map Fragment,如下所示:

// Add the fragment to the 'main_container' FrameLayout
getSupportFragmentManager().beginTransaction().add(R.id.main_container, mapFragment).commit();

现在当你按下设置按钮时,你只需要替换片段:

SettingsFragment settingsFragment = new SettingsFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

// Replace whatever is in the main_container view with this fragment,
// and add the transaction to the back stack if you want the user to be able to navigate back
transaction.replace(R.id.main_container, settingsFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();

更多信息:here

答案 1 :(得分:0)

您可以在布局文件中添加它。以及来自java文件的其他菜单选项。

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical">
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="342dp"
    android:layout_height="473dp" android:id="@+id/map" tools:context=".MapsActivity"
    android:name="com.google.android.gms.maps.SupportMapFragment" />

</LinearLayout>
</LinearLayout>