フラグメントを使用しているときに奇妙な問題に直面していて、それを理解できません。
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で割り当てられた背景を常に表示するようにするにはどうすればよいですか?
すべてのルートレイアウト、ビュー、フラグメント、コンテナなどに次のプロパティを使用できます。
Android:background="@Android:color/transparent"
アクティビティの背景のみを表示する場合は、すべてのビューを透明にする必要があります。
このためには、MainActivity
の背景以外のビューごとにAndroid:background="@Android:color/transparent"
を設定する必要があります。つまり、の背景
Fragment
sView
sListView
(s)ListView
のアイテム/子など。つまり、アクティビティの背景が重なってユーザーに表示されないように、各ビューの背景は透明である必要があります。
これを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);