非常自定义的DialogFragment

时间:2013-12-17 12:04:12

标签: java android

我想做以下(绘制传入):

enter image description here

如您所见,对话框位于屏幕中间,带有自定义视图。

但是,我希望用户能够点击对话框的“后面”,并且永远不会忽略该对话框。

我做了以下实现(DialogFragment):

**
 * Triggered when the Dialog is created.
 *
 * @param savedInstanceState - Bundle containing saved information.
 *
 * @return Dialog ready to be shown.
 */
@Override
public Dialog onCreateDialog( Bundle savedInstanceState )
{
    Dialog dialog = new Dialog( context );

    setCancelable( false );

    return dialog;
}

@Override
public void onCreate( Bundle savedInstanceState )
{
    super.onCreate( savedInstanceState );

    setStyle( STYLE_NO_INPUT, R.style.launcherDialog );
}

这产生以下结果:

enter image description here

这几乎是正确的,现在我想做两件事:

  • 添加自定义视图
  • 删除对话框中生成的灰色背景。

因此,要添加自定义视图,我在onCreateDialog中执行了以下操作:

LayoutInflater inflater = LayoutInflater.from( context )
View progressbarLayout = inflater.inflate( R.layout.launcher_dialog_view, null );
dialog.setContentView( progressbarLayout );

但是我得到了这个例外:

java.lang.RuntimeException: Unable to start activity ComponentInfo{SearchActivity}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content

无论如何,我仍然遗失了如何删除DialogFragment生成的灰色背景。

小贴士非常感激。我已经坚持这么多个小时了。

编辑:哦,布局是:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/launcher_ad_holder"
    android:layout_height="150dp"
    android:layout_width="150dp"
    android:background="@android:color/transparent">


    <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New RadioButton"
            android:id="@+id/radioButton" android:layout_centerVertical="true" android:layout_alignParentRight="true"/>
</RelativeLayout>

风格:

<resources>
<style name="launcherDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:gravity">bottom</item>
</style>

4 个答案:

答案 0 :(得分:0)

在setcontentView()

之前使用它
 requestWindowFeature(Window.FEATURE_NO_TITLE);

答案 1 :(得分:0)

好。我回答自己。对于双重问题,我只有一个答案:

  1. 对于CustomView,我们要覆盖onCreateView方法并在那里对视图进行充气:

    @Override
    public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState )
    {
        return inflater.inflate( R.layout.launcher_dialog_view, null );
    }
    
  2. 但是,仍然缺少删除灰色背景的部分。

    实际情况:

    enter image description here

答案 2 :(得分:0)

尝试此操作以删除背景

Window dialogWindow = getDialog().getWindow();

dialogWindow.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
dialogWindow.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

答案 3 :(得分:0)

试试这个

 @Override
    public void onStart() {
        super.onStart();
        Window window = getDialog().getWindow();
        WindowManager.LayoutParams windowParams = window.getAttributes();
        windowParams.dimAmount = 0.0f;
        windowParams.flags |= WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
        window.setAttributes(windowParams);
    }