将片段完全放在framelayout

时间:2015-05-15 03:38:15

标签: android android-fragments android-framelayout

在我的应用中,我想在所有屏幕的底部保留相同的广告横幅,因此我使用一个包含多个片段的活动。

在Activity的layoutfile(activity_mail.xml)中,我有一个FrameLayout作为片段的容器,底部有一个AdView来显示来自Admob的横幅广告。

 <RelativeLayout
        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"
        tools:context=".MainActivity"
        tools:ignore="MergeRootFrame">
        <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
        <fragment
            android:id="@+id/adFragment"
            android:name="com.jiyuzhai.wangxizhishufazidian.MainActivity$AdFragment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true" />
</RelativeLayout>

替换现有片段的片段布局

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:background="@drawable/theme_color"
        android:layout_alignParentTop="true"
        android:text="Topbar in fragment"
        android:textColor="@android:color/white"
        android:textSize="30sp"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:background="@drawable/theme_color"
        android:layout_alignParentBottom="true"
        android:text="Bottombar in fragment"
        android:textColor="@android:color/white"
        android:textSize="30sp"/>
</RelativeLayout>

替换现有片段的代码

fragment = new LinmoFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out, R.anim.fade_in, R.anim.fade_out);
fragmentTransaction.replace(R.id.container, fragment);
fragmentTransaction.commit();

但是当我替换容器中的片段时,片段的底部区域被AdView隐藏,换句话说,片段不在Framelayout中,我希望片段完全在容器内。那可能吗?

以下是我想要的

enter image description here

这就是我得到的(广告横幅隐藏片段的底栏)

enter image description here

有什么想法吗?

顺便说一句,我发现Android中没有办法为所有具有多个活动的屏幕保留相同的横幅,很多人说你需要使用包含多个片段的单一活动,然后你可以添加/删除你的片段动态而无需重新加载新横幅,但是,没有为此方法找到代码,所以我自己尝试。如果你有更好的解决方案,请帮助我。

2 个答案:

答案 0 :(得分:2)

试试这个:

 <RelativeLayout
        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"
        tools:context=".MainActivity"
        tools:ignore="MergeRootFrame">
        <fragment
            android:id="@+id/adFragment"
            android:name="com.jiyuzhai.wangxizhishufazidian.MainActivity$AdFragment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true" />
        <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_above="@id/adFragment" />
</RelativeLayout>

我对原始布局文件所做的更改是将adFragment定义移到框架布局上方,使框架布局高度换行内容,并添加layout_above属性以使框架布局显示在广告片段上方。

另一种方法是使用垂直线性布局,首先使用框架布局,布局权重为1(广告片段不会有布局权重)。

顺便说一句,片段完全包含在您的帧布局中。框架布局刚刚与原始布局中的广告片段重叠。上述建议使其没有重叠。

希望这有帮助。

答案 1 :(得分:1)

如果你想避免重叠并让容器填满屏幕,那么你应该只将RelativeLayout改为LinearLayout。

 <LinearLayout
    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"
    tools:context=".MainActivity"
    tools:ignore="MergeRootFrame"
    android:orientation:"vertical"
    >
    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"  />
    <fragment
        android:id="@+id/adFragment"
        android:name="com.jiyuzhai.wangxizhishufazidian.MainActivity$AdFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>