Android为片段设置透明背景

时间:2018-02-25 13:43:03

标签: android android-fragments android-activity android-support-library android-theme

在我的应用程序中,我有单个活动和所有其他片段

我正在设置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 个答案:

答案 0 :(得分:1)

在样式应用

中使用null作为颜色
 <item name="android:windowBackground">null</item>

答案 1 :(得分:1)

  

创建一个回调并在Acitvity中实现它

interface OnFragmentDisplay{
  onFragmentDisplay();
}

当此片段显示时,将活动背景更新为透明..或在活动中将其设置为主题

请参阅 this link this 可能有所帮助

你试过这个吗?

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

答案 2 :(得分:1)

这不是完美的解决方案,但可以解决问题

使用Fragment代替使用DialogFragment

 //exploreCategory is argument
class MyFragment(val exploreCategory: ExploreCategory) : DialogFragment() {

    override fun onStart() {
      super.onStart()
      setWindowParams()
    }

   private fun setWindowParams(){
      dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
      dialog?.window?.setLayout(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.MATCH_PARENT
      )
    }

}

其余代码与您在片段中编写的代码相同

要在片段中的以下代码中显示使用,如果在活动中显示,则使用fragmentManager

MyFragment(exploreCategory).show(childFragmentManager,null)
//exploreCategory is argument, you can choose to send no arguments

答案 3 :(得分:0)

您只需在代码下方设置布局片段的背景:

gcloud firebase test android run .... --device model=${DEVICE_MODEL}

答案 4 :(得分:0)

两个步骤:

第一步 - 创建一个透明背景的视图(在XML文件中)。

在android studio中,找到&#34; res&#34;文件夹,右键单击它,new -> android resource file。比在出现的对话框中放置:

File name: {放在这里。例如 - &#34; my_fragment &#34; (没有引号)}注意只有小写字母,数字和下划线可以

Resource type: 布局

Root element: LinearLayout (您可以在学习更好地了解XML布局之后再将其他任何内容放在此处)

Source set:主要

Directory name:布局。

在出现的窗口中切换到&#34; text&#34;模式而不是&#34;设计&#34; (查看屏幕左下方的标签页。)

复制粘贴此内容而不是文件的内容(它非常相似,我们只需在此添加&#34;透明&#34;背景):

<?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>

第二步 - 在片段中展开此布局。

创建扩展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;
}

当然,不要忘记在活动中创建片段的实例!

答案 5 :(得分:0)

您必须将活动设置为透明。

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

由于您的活动有@color/very_light_gray,即使您将片段设置为@android:color/transparent,它也无效。

每个视图必须具有透明背景以避免重叠。

答案 6 :(得分:0)

您的活动容器布局背景应该是透明的。然后为Fragment的布局设置背景颜色。对于特定片段的布局,设置透明色以获得所需的场景。

答案 7 :(得分:0)

在实例化片段时,您可以在活动中使用类似下面的代码。代替Color.White,您可以使用自己的颜色。

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

答案 8 :(得分:0)

简单的方法是为特定片段的根布局设置背景颜色,如下所示

  

机器人:背景= “@机器人:彩色/透明”

答案 9 :(得分:0)

所以,假设您希望活动和片段对特定片段是透明的(如果这是您想要的问题,那就不太清楚了,但我会假设它是) ..你需要设置&#34;主机&#34;活动背景透明时透明&#34;透明&#34;片段附加到它。当任何其他片段附加到它时,您将需要重置活动背景或它将保持透明..

有几种方法可以做到这一点,但我会选择一些东西&#34;公平&#34;简单的:

透明片段中的

      @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

答案 10 :(得分:0)

在代码中添加此单行

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

答案 11 :(得分:0)

将您的活动布局样式设置为

<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"
    ...>

在其他想要设置白色或其他彩色背景的片段中,在这些片段的主要布局中设置不同的样式。

它会起作用