Android 底表对话框 tansparent 背景

Android bottomsheet dialog tansparent background

提问人:Hasnain Ghias 提问时间:12/14/2020 更新时间:12/14/2020 访问量:1568

问:

我制作了一个带有框架布局的底表对话框。一切正常,但我无法使背景透明。

我为对话框 UI 的 Frame 布局和父布局赋予了透明颜色。

下面是 Frame 布局的代码:

<FrameLayout
            android:id="@+id/nearby_bottom_sheet"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior" />

底表对话框 UI 的代码:

<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"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="@android:color/transparent"
    android:orientation="vertical">

    <com.google.android.material.card.MaterialCardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:layout_marginStart="6dp"
        android:layout_marginEnd="6dp"
        app:cardCornerRadius="20dp"
        app:cardElevation="10dp"
        app:cardPreventCornerOverlap="false"
        app:cardUseCompatPadding="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

           ....
        </LinearLayout>

    </com.google.android.material.card.MaterialCardView>
</LinearLayout>

这是我初始化对话框的方式:

FrameLayout bottom_sheet;
bottomSheetBehavior = BottomSheetBehavior.from(bottom_sheet);
View view = getLayoutInflater().inflate(R.layout.nearby_floating_sheet, null);
bottomSheetDialog = new BottomSheetDialog(getActivity());
bottomSheetDialog.setContentView(view);
bottomSheetDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
((View)view.getParent()).setBackgroundColor(getResources().getColor(android.R.color.transparent));
bottomSheetDialog.show();

这是我的输出:enter image description here

有人可以帮我解决这个问题吗?

对话框 工作表 Android-BottomSheetDialog

评论

0赞 Mohammed Alaa 12/14/2020
这是你的问题答案吗?stackoverflow.com/questions/37104960/......

答:

2赞 Ivan J. Lee 12/14/2020 #1

也许您还应该将对话框窗口设置为透明。

将以下代码添加到 BottomSheetDialog。

// BottomSheetDialog
public BottomSheetDialog(Context context) {
    super(context, R.style.Bottom_Sheet_Style); //set your own dialog theme
    // ...
    Window window = getWindow();
    window.setBackgroundDrawableResource(android.R.color.transparent);       
    WindowManager.LayoutParams lp = window.getAttributes();
    lp.alpha = 1.0f;
    lp.dimAmount = 0.0f; 
    window.setAttributes(lp);
   // ...
}

然后将以下代码添加到 res/values/styles.xml 中。如果您没有该文件,请创建一个。

<style name="Bottom_Sheet_Style" parent="@android:style/Theme.Dialog">  
    <item name="android:windowBackground">@android:color/transparent</item>  
    <item name="android:windowNoTitle">true</item>  
    <item name="android:backgroundDimEnabled">true</item>  
</style>

评论

0赞 Hasnain Ghias 12/14/2020
结果还是一样的
0赞 Ivan J. Lee 12/14/2020
@HasnainGhias可以发布您的 Dialog 主题代码?
0赞 Hasnain Ghias 12/14/2020
主题代码是什么意思。我是 android 新手
0赞 Ivan J. Lee 12/14/2020
@HasnainGhias修改了我的答案,你可以试试。
1赞 Arvin Rezaei 12/14/2020 #2

对于透明背景,您必须在创建对话框时应用主题 首先创建以下样式

<item name="android:background">@android:color/transparent</item>

然后使用以下方法应用它BottomSheetDialog(this,R.style.yourStyle)

可用于设置点心量bottomSheetDialog.getWindow().setDimAmount(0)