使片段完全在框架布局内
Make fragment totally inside framelayout
在我的应用中,我想在所有屏幕的底部保留一个相同的广告横幅,所以我使用一个 Activity 和多个片段。
在 Activity 的布局文件 (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之外,我希望片段完全在容器内。这可能吗?
下面是我要的
这就是我得到的(广告横幅隐藏了片段的底部栏)
有什么想法吗?
顺便说一句,我发现在 Android 中无法为具有多个 Activity 的所有屏幕保持相同的横幅,SO 上的许多人说您需要使用具有多个片段的 Single Activity,那么您可以 add/remove 你的片段动态而不重新加载新的横幅,但是,没有找到这种方法的代码,所以我自己试试。如果你有更好的解决方案,请帮助我。
试试这个:
<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(广告片段不会有布局权重)。
顺便说一句,该片段完全包含在您的框架布局中。框架布局只是与原始布局中的广告片段重叠。上面的建议使得没有重叠。
希望对您有所帮助。
如果既要避免重叠又要使容器填满屏幕,则只需将 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>
在我的应用中,我想在所有屏幕的底部保留一个相同的广告横幅,所以我使用一个 Activity 和多个片段。
在 Activity 的布局文件 (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之外,我希望片段完全在容器内。这可能吗?
下面是我要的
这就是我得到的(广告横幅隐藏了片段的底部栏)
有什么想法吗?
顺便说一句,我发现在 Android 中无法为具有多个 Activity 的所有屏幕保持相同的横幅,SO 上的许多人说您需要使用具有多个片段的 Single Activity,那么您可以 add/remove 你的片段动态而不重新加载新的横幅,但是,没有找到这种方法的代码,所以我自己试试。如果你有更好的解决方案,请帮助我。
试试这个:
<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(广告片段不会有布局权重)。
顺便说一句,该片段完全包含在您的框架布局中。框架布局只是与原始布局中的广告片段重叠。上面的建议使得没有重叠。
希望对您有所帮助。
如果既要避免重叠又要使容器填满屏幕,则只需将 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>