我想做以下(绘制传入):
如您所见,对话框位于屏幕中间,带有自定义视图。
但是,我希望用户能够点击对话框的“后面”,并且永远不会忽略该对话框。
我做了以下实现(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 );
}
这产生以下结果:
这几乎是正确的,现在我想做两件事:
因此,要添加自定义视图,我在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>
答案 0 :(得分:0)
在setcontentView()
之前使用它 requestWindowFeature(Window.FEATURE_NO_TITLE);
答案 1 :(得分:0)
好。我回答自己。对于双重问题,我只有一个答案:
对于CustomView,我们要覆盖onCreateView方法并在那里对视图进行充气:
@Override
public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState )
{
return inflater.inflate( R.layout.launcher_dialog_view, null );
}
但是,仍然缺少删除灰色背景的部分。
实际情况:
答案 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);
}