DialogFragment AlertDialog上方的奇怪黑线

时间:2013-09-30 04:34:00

标签: android android-alertdialog android-theme android-dialogfragment

下面是我在对话框片段上方出现的随机黑/黑略向下渐变线的截图。

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

public Dialog onCreateDialog(Bundle savedInstanceState)

之前有人发生过这种情况或者有任何想法吗?

我试图以不同的方式对它们进行主题化,API14 holo和holoeverywhere库也是如此。香港专业教育学院曾尝试将背景设置为透明等...但除了使昏暗消失外,还没有取得任何成就。

Dark lin

4 个答案:

答案 0 :(得分:6)

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

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

然后,在DialogFragment onCreate电话中<{1}}:

setStyle(/* desired style */, R.style.MyDialogTheme);

答案 1 :(得分:3)

由于标题栏而出现奇怪的线条。你只需要隐藏标题栏,它就会自动隐藏怪异的一行:

@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;
}

答案 2 :(得分: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);

答案 3 :(得分:0)

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

所以交易是系统自己的FrameLayout(带有id:android:id / content)在它上面有一个前景可画(框架顶部的阴影)。我无法用我的生活中的风格或任何东西来处理它,也无法弄清楚为什么它会在对话碎片内的这两个自定义警报对话框中发生。

注意:我正在使用与v7 AppCompat兼容的HoloEverywhere分支,但保留了来自实际支持库的许多类......

然而,我可以访问framelayout并删除前景drawable: (注意:它必须在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));
}

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