DialogFragment去掉黑色边框

3

我看到了这个问题,也看到了这个和其他一些问题,但是没有什么真正帮助了我。

我正在为我的列表视图构建一个快速操作DialogFragment,并尝试按照Android开发指南的要求设置自定义视图。

view_quick_action.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/white" >

    <ImageView
        android:id="@+id/quick_action_image"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_margin="20dp"
        android:scaleType="fitXY"
        android:src="@drawable/windows1" />

    <TextView
        android:id="@+id/quick_action_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/quick_action_image"
        android:layout_toRightOf="@+id/quick_action_image"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="Lilly"
        android:textColor="#585858"
        android:textSize="16sp" />

    <TextView
        android:id="@+id/quick_action_activity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/quick_action_image"
        android:layout_toRightOf="@+id/quick_action_image"
        android:text="Updated 4 minutes ago"
        android:textColor="#a3a3a3"
        android:textSize="15sp" />

    <ImageButton
        android:id="@+id/popup_grid_leave"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/quick_action_activity"
        android:layout_margin="20dp"
        android:layout_marginTop="30dp"
        android:background="@color/transperent"
        android:src="@drawable/ic_action_leave" />

    <ImageButton
        android:id="@+id/popup_grid_silence"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignBottom="@+id/popup_grid_leave"
        android:layout_alignTop="@+id/popup_grid_leave"
        android:layout_centerHorizontal="true"
        android:background="@color/transperent"
        android:src="@drawable/ic_action_silence" />

    <ImageButton
        android:id="@+id/popup_grid_mark_as_read"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignBottom="@+id/popup_grid_leave"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/popup_grid_leave"
        android:layout_marginRight="15dp"
        android:background="@color/transperent"
        android:src="@drawable/ic_action_mark_as_read" />

</RelativeLayout>

QuickActionFragment.java

public class QuickActionFragment extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(mContext);

        View v = LayoutInflater.from(mContext).inflate(
        R.layout.view_quick_action, null, false);

        // SET ALL THE VIEWS

        builder.setTitle(null);

        AlertDialog dialog = builder.create();
        dialog.setView(v, 0, 0, 0, 0);
        // this line didn't change anything
        // dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));

        return dialog;
    }
}

在做了这一切之后,当我运行dialogFragment.show(getSupportedFragmentManager())时,我仍然会得到如图所示的黑色边框:quickActionImage。你有什么想法如何解决这个问题吗?
4个回答

11

请尝试以下代码:

public class QuickActionFragment extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog m_dialog = new Dialog(QuickActionFragment.this, R.style.Dialog_No_Border);
        LayoutInflater m_inflater = LayoutInflater.from(CustomDialogActivity.this);
        View v = LayoutInflater.from(mContext).inflate(R.layout.view_quick_action, null, false);
        // SET ALL THE VIEWS
        m_dialog.setTitle(null);
        m_dialog.setContentView(m_view);
        m_dialog.show();
        return dialog;
    }
}
在您的res/value/style.xml文件中添加Dialog_No_Border样式。
<style name="Dialog_No_Border">
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

这种样式会导致在清理后删除R


我应该在onCreateDialog中显示对话框,而不是在调用代码中吗? - thepoosh
这个没有起作用,我添加了一个带有这些参数的style,但是什么也没有改变。 - thepoosh
2
你的代码仅支持API 11及以上版本,而我支持从9版本开始的所有版本。 - thepoosh
我只是在你的代码中将AlertDialog更改为Dialog,除此之外没有做任何其他更改。因此,API级别不应该有任何问题。我猜是这样的.. 你遇到了什么错误,请告诉我。 - GrIsHu
构造函数需要两个参数,API 11及以上版本才支持,可以在此处查看:http://tinyurl.com/b9jg6ht - thepoosh

1

我在Xamarin - Android上无法让这些代码工作。也许这个解决方案可以为其他人节省一些时间:

public override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    SetStyle(DialogFragmentStyle.NoFrame, 0);
}

public override void OnResume()
{
    base.OnResume();
    Dialog.Window.SetBackgroundDrawableResource(Resource.Color.transparent);
}

如果你的资源中没有'透明'颜色,你可以创建一个或使用Android的默认颜色。我在自定义MvvmCross Fingerprint Plugin的对话框片段时遇到了这个问题。

谢谢,这行代码正是我所寻找的答案:Dialog.Window.SetBackgroundDrawableResource(Resource.Color.transparent); - Josue Morales

0

我在Gingerbread上无法让任何答案起作用,因为顶部和底部被切掉了,但我找到了一个解决方法:您可以在顶部和底部设置额外的填充来抵消被切掉的部分。

if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    int padding = getResources().getDimensionPixelSize(R.dimen.your_padding);
    view.setPadding(0, padding, 0, padding);
}

然后按照其他答案所述设置视图

demoDialog.setView(view, 0, 0, 0, 0);

0
尝试在创建实例时使用setStyle(style, theme)方法,像这样:
public static YourDialog newInstance() {
    YourDialog frag = new YourDialog();
    // your code
    frag.setStyle(DialogFragment.STYLE_NO_FRAME, 0);
    // your code
    return frag;
}

希望这可以帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接