Направете фрагмент изцяло вътре в рамката

В моето приложение искам да запазя един и същ рекламен банер в долната част на всички екрани, така че използвам една дейност с множество фрагменти.

Във файла за оформление на активността (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, много хора в SO казаха, че трябва да използвате единични дейности с множество фрагменти, след което можете да добавяте/премахвате вашите фрагменти динамично без презареждане нов банер, но не е намерен код за този подход, така че го пробвам сам. ако имате по-добри решения, моля, помогнете ми.


person zdd    schedule 15.05.2015    source източник


Отговори (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 (и рекламният фрагмент няма да има тегло на оформлението).

Между другото, фрагментът се съдържа изцяло в оформлението на вашата рамка. Оформлението на рамката просто се припокрива от рекламния фрагмент в оригиналното ви оформление. Горното предложение прави така, че да няма припокриване.

Надявам се това да помогне.

person Justin Hong    schedule 15.05.2015
comment
Благодаря, работи след добавянето на този ред android:layout_above="@id/adFragment - person zdd; 18.05.2015

Ако искате едновременно да избегнете припокриване и да накарате контейнера да запълни екрана, тогава трябва просто да промените 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>
person inmyth    schedule 15.05.2015