web-dev-qa-db-ja.com

Androidフラグメントの透明な背景を設定

私のアプリでは、単一のアクティビティと他のすべてのフラグメントがあります

以下のようにstyle.xmlからアクティビティの背景を設定しています

<item name="Android:windowBackground">@color/very_light_gray</item>

今私は背景を透明にしたい特定の断片のみについて、私はそれを行うことができません

  @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

// create ContextThemeWrapper from the original Activity Context with the custom theme
final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.yourCustomTheme);

// clone the inflater using the ContextThemeWrapper
LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper);

// inflate the layout using the cloned inflater, not default inflater
return localInflater.inflate(R.layout.yourLayout, container, false);
}

それを行う方法はありますか?

12
amodkanthe

スタイルアプリの色にnullを使用

 <item name="Android:windowBackground">null</item>
1
Rasoul Miri

コールバックを作成し、Acitvityに実装します

interface OnFragmentDisplay{
  onFragmentDisplay();
}

このフラグメントが表示されるときアクティビティの背景を透明に更新します。またはアクティビティのテーマをそこに設定します

このリンクおよびthis役立つかもしれません

これを試してみましたか

fragment.getView().setBackgroundColor(Color.WHITE);
1
Xar E Ahmer

2つのステップ:

最初のステップ-背景を透明にして(XMLファイルに)ビューを作成します。

in Android studio、「res」フォルダーを見つけて右クリックし、new -> Android resource file。表示されるダイアログに置くよりも:

File name: {ここに何かを入れてください。例えば-"my_fragment"(引用符なし)}小文字、数字、アンダースコアのみが問題ないことに注意してください

Resource type:レイアウト

Root element:LinearLayout(XMLレイアウトについての知識を深めたら、ここに他のものを置くことができます)

Source set:メイン

Directory name: レイアウト。

表示されるウィンドウで、「デザイン」ではなく「テキスト」モードに切り替えます(画面の左下にあるタブを探します)。

ファイルのコンテンツの代わりにこれをコピーアンドペーストするよりも(非常に似ているので、ここに「透明な」背景を追加します):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical" 
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@Android:color/transparent"
    >

</LinearLayout>

2番目のステップ-このレイアウトをフラグメントに展開します。

fragmentを拡張するフラグメントクラスを作成し、onCreateView()メソッドをオーバーライドします。そのメソッド内でビューを拡張し、それを返します。

public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    // assuming you named your xml file "my_fragment":
    // for other names replace R.layout.my_fragment with  R.layout.put_your_name_here
    View view = inflater.inflate(R.layout.my_fragment, container, false);
    return view;
}

もちろん、アクティビティでフラグメントのインスタンスを作成することを忘れないでください!

0
Re'em

アクティビティも透過的に設定する必要があります。

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

アクティビティには@color/very_light_grayがあるため、フラグメントを@Android:color/transparentに設定しても機能しません。

重複を避けるために、各ビューには透明な背景が必要です。

0
Gokul Nath KP

したがって、アクティビティとフラグメントを特定のフラグメントに対して透過的にすることを前提としています(これがあなたの質問から望むものであるかどうかは明確ではありませんが、私はそれがそうであると仮定します)。 「透明」フラグメントが添付されている場合、アクティビティの背景が透明になります。他のフラグメントがアタッチされた場合、アクティビティの背景をリセットする必要があります。そうしないと、透明のままになります。

これを行うにはいくつかの方法がありますが、私は「かなり」簡単に何かを選びます。

あなたの透明な断片で:

      @Override
      public void onStart() {
        super.onStart();
// I'm using null here because drawing nothing is faster than drawing transparent pixels.
        getActivity().getWindow().setBackgroundDrawable(null);
        getView().setBackground(null);
      }

      @Override
      public void onStop() {
        super.onStop();
        getActivity().getWindow().setBackgroundDrawable(new ColorDrawable(@color/very_light_gray));
     }

これが望む効果であるかどうかは完全にはわかりません。

幸運を。よろしく、CJ

0
C James

簡単な方法は、その特定のフラグメントのルートレイアウトの背景色を次のように設定することです

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

0
Uma Achanta

コードの下にレイアウトフラグメントの背景を設定しました。

<LinearLayout
...
Android:background="@Android:color/transparent"/>
0
nhonnq

アクティビティコンテナレイアウトの背景は透明である必要があります。次に、フラグメントのレイアウトの背景色を設定します。特定のフラグメントのレイアウトについては、透明色を設定して必要なシナリオを取得します。

0
Zia

フラグメントをインスタンス化しながら、アクティビティで以下のコードのようなものを使用できます。 Color.Whiteの代わりに、独自の色を使用できます。

fragment.getView().setBackgroundColor(Color.WHITE);
0

この単一行をコードに追加します

getActivity().getWindow().setBackgroundDrawableResource(R.drawable.my_drawable);
0
Nik

アクティビティレイアウトのスタイルを次のように設定します

<style name="RootLayout" parent="AppTheme">
    <item name="Android:background">@drawable/app_transparent_background</item>
</style>

アクティビティの親レイアウトに次のように設定します

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    style="@style/RootLayout"
    ...>

白または他の色付きの背景を設定する他のフラグメントでは、それらのフラグメントのメインレイアウトに異なるスタイルを設定します。

それが動作します

0
Chintak Patel