【问题标题】:Weird black line above DialogFragment AlertDialogDialogFragment AlertDialog 上方奇怪的黑线
【发布时间】:2013-09-30 04:33:59
【问题描述】:

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

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

public Dialog onCreateDialog(Bundle savedInstanceState)

之前有人遇到过这种情况或有什么想法吗?

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

【问题讨论】:

  • 尝试关闭阴影之类的。它很棘手,您可能需要展示一些代码
  • 这是一个阴影,但我无法通过样式或其他方式找到它,请参阅我在下面发布的答案。

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


【解决方案1】:

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

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

然后,在您的DialogFragment 中调用onCreate

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

【讨论】:

  • 简单而强大的解决方案。有用。非常感谢。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    试试这个,

     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);
    

    【讨论】:

    • 您能否用您自己的话提供答案或添加对代码的解释?代码示例应该只是您答案的补充,而不是完整的答案。它应该可以帮助用户理解问题并防止他们不假思索地复制粘贴代码。
    【解决方案4】:

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

    所以交易是系统自己创建的 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));
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多