【问题标题】:DialogFragment remove black borderDialogFragment 去除黑边
【发布时间】:2013-02-07 08:32:49
【问题描述】:

我看到了 this questionthis one 以及其他一些人,但没有任何帮助。

我正在为我的列表视图构建一个快速操作DialogFragment,并尝试根据android dev guide为其设置自定义视图。

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()) 时,我仍然得到黑色边框,如图所示:

关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: android background android-dialogfragment


    【解决方案1】:

    试试下面的代码:

    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而不是调用代码中显示对话框?!
    • 这不起作用,我用这些参数添加了一个style,但没有任何改变
    • 您的代码仅从 API lvl 11 开始受支持,我一直支持到 9
    • 我只在您的代码中将 AlertDialog 更改为 Dialog ,仅此而已。所以API级别应该没有任何问题。我想是的。你告诉我什么错误。
    • 接受 2 个参数的构造函数来自 API 11 及更高版本,如下所示:tinyurl.com/b9jg6ht
    【解决方案2】:

    我无法在 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);
    【解决方案3】:

    在创建实例时尝试使用 setStyle(style, theme) 方法,如下所示:

    public static YourDialog newInstance() {
        YourDialog frag = new YourDialog();
        // your code
        frag.setStyle(DialogFragment.STYLE_NO_FRAME, 0);
        // your code
        return frag;
    }
    

    希望对你有所帮助。

    【讨论】:

      【解决方案4】:

      由于顶部和底部被截断,我无法得到任何关于 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-14
        • 1970-01-01
        • 1970-01-01
        • 2018-07-10
        • 2012-10-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多