4

我在下面的屏幕截图中显示了我的对话框片段上方出现的随机暗/黑色略微向下的渐变线。

这些是使用已被覆盖的 dialogfragment 类构建的,并且正在使用 alertdialog 构建器在以下方法中构建它们(有或没有标题/按钮)

public Dialog onCreateDialog(Bundle savedInstanceState)

有没有人遇到过这种情况或者有什么想法?

我尝试过不同的主题,API14 holo 和 holoeverywhere 库都发生了同样的情况。我试图将背景设置为透明等......但除了让昏暗消失之外,没有取得任何成就。

暗林

4

4 回答 4

6

您需要为对话框添加自定义主题并提供android:windowContentOverlay参数。

<style name="MyDialogTheme">
    <item name="android:windowContentOverlay">@null</item>
</style>

然后,在您DialogFragmentonCreate通话中:

setStyle(/* desired style */, R.style.MyDialogTheme);
于 2013-11-20T11:17:15.840 回答
4

奇怪的线出现是因为标题栏。您只需要隐藏标题栏,它就会自动隐藏奇怪的行:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);

    // request a window without the title
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);

    // make your dialog here
    return dialog;
}
于 2016-03-14T09:45:52.563 回答
0

尝试这个,

 private Dialog custom_dialog;
 private Window window;
 custom_dialog = new Dialog(context);
 custom_dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
 custom_dialog.setContentView(R.layout.share_dialog);
 custom_dialog.setCancelable(true);
//Below code is used to remove wired black line
 window = custom_dialog.getWindow();
 window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
 window.setLayout(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
 window.setGravity(Gravity.CENTER);
 window.setBackgroundDrawableResource(R.drawable.empty);
于 2013-09-30T04:48:37.847 回答
0

找到了解决我的问题的一种方法。

所以交易是系统自己制作的FrameLayout(带有id:android:id / content)有一个可绘制的前景(框架顶部的阴影)。我一辈子都无法用样式或任何东西来处理它,我也无法弄清楚为什么它会发生在 dialogfragments 内的这两个自定义警报对话框上。

注意:我使用的是与 v7 AppCompat 兼容的 HoloEverywhere 分支,但保留了尽可能多的类等......来自实际的支持库。

但是,我可以访问框架布局并使用以下方法删除前景可绘制对象:(注意:它必须在 onresume 中,因为我认为在此之前没有任何调用导致“android.util.AndroidRuntimeException:必须调用 requestFeature()添加内容之前”错误。

public void onResume() {
    super.onResume();
    ((FrameLayout) getDialog().getWindow().getDecorView().findViewById(android.R.id.content)).setForeground(new ColorDrawable(android.graphics.Color.TRANSPARENT));
}

如果有更好更安全的方法,或者如果有人知道为什么会这样,请告诉我。

于 2013-09-30T22:46:18.687 回答