web-dev-qa-db-ja.com

フラグメントのreplace()には、透明ではなくデフォルトの白い背景があります

フラグメントを使用しているときに奇妙な問題に直面していて、それを理解できません。

MainActivityコンテナー内のフラグメントを置き換えると、目的の透明な背景を維持するものと、デフォルトのような白い背景を表示するものがあります。実際には、すべてのフラグメントを透過的にして、MainActivityに割り当てられた背景を「使用」する必要があります。

例:フラグメントA:白い背景

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

    <ImageView
        Android:id="@+id/image"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="20dp"
        Android:layout_marginLeft="20dp"
        Android:layout_marginRight="20dp"
        Android:paddingLeft="10dp"
        Android:paddingRight="10dp"
        Android:src="@drawable/logo"/>

    <de.mypackage.uielements.MyButton
        Android:id="@+id/button"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginLeft="20dp"
        Android:layout_marginRight="20dp"
        Android:text="@string/button_text"/>    

    **<!-- ListView to show news -->**
    <ListView
        Android:id="@+id/listview"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:dividerHeight="1dp"
        Android:layout_marginLeft="20dp"
        Android:layout_marginRight="20dp"
        Android:layout_marginBottom="10dp"/>
</LinearLayout>

フラグメントB:透明な背景

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

    <ListView
        Android:id="@+id/listview"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"/>
</LinearLayout>

main.xml

<Android.support.v4.widget.DrawerLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context=".MainActivity">

    <!-- Background Image to be set programmatically, transparent being default -->
    <ImageView
        Android:id="@+id/window_background_image_view"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:scaleType="centerCrop"
        Android:background="@Android:color/transparent"/>

    <RelativeLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:background="@Android:color/transparent">

        <!-- Top ScrollView -->
        <de.opwoco.app.Android.apptitan.app.utils.HorizontalListView
            Android:id="@+id/navigation_tab_listview"
            Android:layout_width="match_parent"
            Android:layout_height="50dp"
            Android:visibility="gone"
            Android:background="@color/navigation_background"/>

        <!-- FrameLayout container where all other fragments are placed -->
        <FrameLayout
            Android:id="@+id/container"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:background="@Android:color/transparent"
            Android:layout_below="@+id/navigation_tab_listview"/>

    </RelativeLayout>

    <fragment
        Android:id="@+id/navigation_drawer"
        Android:layout_width="@dimen/navigation_drawer_width"
        Android:layout_height="match_parent"
        Android:layout_gravity="start"
        Android:name="de.mypackage.fragment.NavigationDrawerFragment"
        tools:layout="@layout/fragment_navigation_drawer"/>

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

両方のフラグメントは、次のスニペットを使用して置き換えられます。

Android.support.v4.app.FragmentTransaction transaction =     getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.container, fragment);
transaction.commit();

だから私の質問は:

コンテナ内のすべてのフラグメントが透明な背景を持ち、MainActivityで割り当てられた背景を常に表示するようにするにはどうすればよいですか?

12
W3hri

すべてのルートレイアウト、ビュー、フラグメント、コンテナなどに次のプロパティを使用できます。

Android:background="@Android:color/transparent"

アクティビティの背景のみを表示する場合は、すべてのビューを透明にする必要があります。

このためには、MainActivityの背景以外のビューごとにAndroid:background="@Android:color/transparent"を設定する必要があります。つまり、の背景

  • Fragments
  • 彼らの子供Views
  • ListView(s)
  • およびListViewのアイテム/子など。

つまり、アクティビティの背景が重なってユーザーに表示されないように、各ビューの背景は透明である必要があります。

12
SMR

これをxmlで使用します:

   <FrameLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="#00E6CECE"
        Android:id="@+id/fragment_container" />

そしてJavaこれを使用してください:

findViewById(R.id.fragment_container).setBackgroundColor(Color.WHITE);
0
Biplob Das