我希望在特定条件之后显示一个对话框,但是对于现在的演示,我想从扩展应用程序的类中显示一个对话框.这是我的代码
public class ControlApplication extends Application
{
@Override
{
super.onCreate();
final Dialog dialog = new Dialog ( getApplicationContext() );
dialog.setTitle("zakasssssssssssssssssss");
dialog.setCancelable(false);
dialog.show();
}
Run Code Online (Sandbox Code Playgroud)
}
但是在dialog.show()我得到的错误就像
Attempted to add window with non-application token WindowToken{4067a268 token=null}. Aborting.
D/AndroidRuntime( 1923): Shutting down VM
W/dalvikvm( 1923): threadid=1: thread exiting with uncaught exception (group=0x40015560)
E/AndroidRuntime( 1923): FATAL EXCEPTION: main
E/AndroidRuntime( 1923): java.lang.RuntimeException: Unable to create application
com.test.shrenik.ControlApplication: android.view.WindowManager$BadTokenException:
Unable to add window -- token null is not for an application
E/AndroidRuntime( 1923): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3275)
E/AndroidRuntime( …Run Code Online (Sandbox Code Playgroud) 如何将自定义对话框显示为容器的中心?
Dialog customdialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar);
Window window = customdialog.getWindow();
window.setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
window.setGravity(Gravity.CENTER);
Run Code Online (Sandbox Code Playgroud)
R.style.Theme_Translucent_NoTitleBar - 用于删除cutomdialog的边框.一旦我使用此行,对话框将出现在平板电脑的顶部角落?
任何人都可以帮我解决这个问题吗?
我希望我的片段看起来与我应用的其他应用程序和调色板一致,所以我想改变标题的颜色,还要改变正/负按钮的颜色:

我尝试这样做,但不幸的是它不起作用:
public void onStart() {
super.onStart();
Dialog d = getDialog();
int dividerId = d.getContext().getResources().getIdentifier("android:id/titleDivider", null, null);
View divider = d.findViewById(dividerId);
if(currentapiVersion< Build.VERSION_CODES.LOLLIPOP) {
divider.setBackgroundColor(getResources().getColor(R.color.accent));
LinearLayout ll = (LinearLayout) d.findViewById(R.id.dialog_background);
ll.setBackgroundResource(R.drawable.backrepeat_reversed);
}
if(currentapiVersion == Build.VERSION_CODES.LOLLIPOP) {
int buttonsId = d.getContext().getResources().getIdentifier("android:id/negativeButton", null, null);
Button b = (Button) d.findViewById(buttonsId);
b.setTextColor(getResources().getColor(R.color.accent));
}
int textViewId = d.getContext().getResources().getIdentifier("android:id/alertTitle", null, null);
TextView tv = (TextView) d.findViewById(textViewId);
tv.setTextColor(getResources().getColor(R.color.accent));
}
Run Code Online (Sandbox Code Playgroud)
如何更改这些按钮的颜色?也许可以通过styles.xml文件在整个应用程序中完成它?
android android-dialog android-dialogfragment android-5.0-lollipop
我正在NavigationComponent我的应用程序上使用。
我有一个特定的流程,点击BottomSheetDialogFragment应用程序的按钮后应该导航到另一个片段。但是当弹出该 Fragment 时,我需要导航回上一个BottomSheetDialogFragment.
由于某种原因,该请求BottomSheetDialogFragment被自动驳回。
Frag A : click on a button
Frag A -> Dialog B : click on a button
Frag A -> Dialog B -> Frag C : pop Frag C from the stack
Frag A : Dialog B was automatically dismissed =;/
Run Code Online (Sandbox Code Playgroud)
如何才能防止这种解雇呢?
问:为什么我需要BottomSheetDialogFragment不解雇?
A:我通过.a监听打开片段的结果LiveData。由于解雇,BottomSheetDialogFragment它永远不会收到结果。
android android-dialog android-dialogfragment android-navigation android-bottomsheetdialog
当我的android应用程序抛出异常时,我想显示一个自定义对话框告诉用户发生了错误,所以我Thread.setDefaultUncaughtExceptionHandler用来设置一个全局异常处理程序:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, final Throwable ex) {
AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
builder.setTitle("There is something wrong")
.setMessage("Application will exit?" + ex.toString())
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// throw it again
throw (RuntimeException) ex;
}
})
.show();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
但我发现它有任何异常抛出,AlertDialog不会显示,而是应用程序阻塞,过了一会儿,它会显示一个系统对话框:
X app is not responding. Would you like to close …Run Code Online (Sandbox Code Playgroud) android exception-handling android-alertdialog android-dialog
我禁用了fitSystemWindowsviaWindowCompat.setDecorFitsSystemWindows(window, false)在状态栏后面绘制,并且我正在使用insets accompanist 库来获取相应的插图,以将填充添加到特定的可组合项。
但是,如果我显示全屏对话框,该对话框仍然具有系统栏和导航栏的填充,并且拒绝在状态栏后面绘制。
该对话框类似于以下代码片段:
Dialog(
onDimissRequest = {},
properties = DialogProperties(usePlatformDefaultWidth = false)
) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
是否需要任何其他设置才能让对话框绘制在系统状态栏后面?
android android-dialog android-dialogfragment android-jetpack-compose
我想删除对话框外的透明暗背景.

我尝试过:
final Dialog dialog = new Dialog(this);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.WHITE));
this.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.WHITE));
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.spinner_layout);
getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);
Run Code Online (Sandbox Code Playgroud) Dialog dialog;
private void opendialog() {
dialog = new Dialog(MainActivity.this);
dialog.setContentView(R.layout.popup);
dialog.setTitle(R.string.msettings);
RelativeLayout reply_layout = (RelativeLayout) dialog
.findViewById(R.id.reply_layout);
final RelativeLayout ringtone_layout = (RelativeLayout) dialog
.findViewById(R.id.ringtone_layout);
registerForContextMenu(ringtone_layout);
ringtone_layout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
openContextMenu(ringtone_layout);
}
});
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Select The Action");
menu.add(0, v.getId(), 0, "Edit");
menu.add(0, v.getId(), 1, "Delete");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
System.out.println("Inside onContextItemSelected");
return super.onContextItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)
在Dialog中使用上下文菜单时,永远不会调用onContextItemSelected.我的代码有什么问题吗?提前致谢..
我正在构建一个包含多项选项(复选框)的对话框:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMultiChoiceItems(arrayResource, selectedItems, new DialogInterface.OnMultiChoiceClickListener() {
// ...
});
AlertDialog dialog = builder.create();
dialog.show();
Run Code Online (Sandbox Code Playgroud)
我有一个复选框的自定义样式:
<style name="CustomCheckBox" parent="@android:style/Widget.CompoundButton.CheckBox">
<item name="android:button">@drawable/btn_check</item>
<item name="android:textColor">@android:color/holo_purple</item>
</style>
Run Code Online (Sandbox Code Playgroud)
通过设置应用于布局中的各个复选框时,它可以很好地工作style="@style/CustomCheckBox".
但是,如何将此样式应用于创建的对话框?或者对整个主题来说......
如果它有点相关 - 我正在使用minSdkVersion=14和targetSdkVersion=19.
更新:
现在根据MattMatt的回答,我将自定义复选框样式应用于整个主题,并为对话框设置自定义样式:
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:checkboxStyle">@style/CustomCheckBox</item>
<item name="android:dialogTheme">@style/CustomDialog</item>
<item name="android:alertDialogTheme">@style/CustomDialog</item>
</style>
<style name="CustomCheckBox" parent="@android:style/Widget.CompoundButton.CheckBox">
<item name="android:button">@drawable/btn_check</item>
<item name="android:checkMark">@drawable/btn_check</item>
</style>
<style name="CustomDialog" parent="@android:style/Theme.Holo.Light.Dialog">
<item name="android:checkboxStyle">@style/CustomCheckBox</item>
<item name="android:background">#aaf</item>
</style>
Run Code Online (Sandbox Code Playgroud)
现在添加到布局的任何复选框都会获得自定义样式,我可以更改对话框的背景,但对话框中的复选框不会受到任何影响......
checkbox android android-theme android-dialog android-styles
如何禁用BottomSheetDialogFragment手指拖动?
我看到了类似的问题,但他们BottomSheet都不是BottomSheetDialogFragment.
android android-layout android-view android-dialog bottom-sheet