Android Java:如何防止我的对话框在关闭时短暂显示 MainActivity appname?
Android Java: How do I prevent my Dialog box from showing MainActivity appname briefly when the Dialog closes?
我是 Android 开发的新手,我已经创建了我的第一个 "real" 应用程序,它执行以下操作:
- 启动 MainActivity
MainActivity 处理额外数据,然后显示扩展 Dialog
的 ViewDialog
。 ViewDialog
有一个 showDialog()
方法,它执行以下操作来设置和显示 Dialog
:
protected void showDialog(final Activity activity)
{
dialog = new Dialog(activity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(false);
dialog.setContentView(dialog_layout);
// Set background color of the dialog
ConstraintLayout currentLayout = (ConstraintLayout) dialog.findViewById(R.id.Dialog);
// setup of views etc ...
// Finally dislay `Dialog`
dialog.show();
// Method called to start a `DialogTimer` which extends `CountDownTimer`
}
MainActivity 显示 ViewDialog
如下:
public class MainActivity extends AppCompatActivity {
private static Context appContext;
private static ViewDialog notify;
protected void onCreate(Bundle savedInstanceState) {
// methods and processing etc...
// time to display dialog
notify = new ViewDialog(mParameters, mThemeHandler );
// ******************** Show dialog box *******************
notify.showDialog(activity: this); // showDialog just calls `Dialog.show()`
notify.ApplyTheme();
}
当计时器到期或用户按下按钮时,ViewDialog
关闭,应用程序结束,代码如下:
mButton1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CancelTimer();
activity.finishAndRemoveTask();
dialog.dismiss();
问题是,当 ViewDialog
被关闭时,我偶尔会看到一条消息,显示在 AndroidManifest 文件中设置的活动 android:label
。
我不确定为什么会这样,但我 假设 它在 ViewDialog
关闭时显示 MainActivity
布局的某些项目拥有 dialog_layout
布局文件。
我摆弄了很多不同的东西并更改了 code/layouts 等等,但我一直没能找到我的错误。
有哪些指示和提示可以帮助我解决此问题?
如果需要,我很乐意提供更多详细信息。
布局和清单文件在这里:
- 清单https://pastebin.com/GL70FxGh
- activity_main.xml https://pastebin.com/qDVa0LrN
- dialog_layout.xml https://pastebin.com/RC4e6W9T
您发布的代码不足以弄清楚为什么会发生这种情况,但是有一个通用的解决方案是看不到 Activity 标题(即在清单的标签字段中设置)。
在您的 styles.xml 中声明一个新主题,例如
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:windowContentOverlay">@null</item>
</style>
然后像这样
让它成为你activity的主题
<activity
...
android:name="boha.notify.MainActivity"
android:theme="@style/AppTheme.NoActionBar">
...
</activity>
虽然我不是 100% 确定(因为这种行为可以在您 activity 的实际代码中改变)我认为这可能会有所帮助。
希望对您有所帮助。
您可以通过将 android:theme 属性设置为 @android:style/Theme.NoTitleBar 在您的 AndroidManifest.xml 元素上实现此目的,如下所示:
<activity android:name=".Activity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
notify.setOnDissmissListener({CancelTimer()
activity.finishAndRemoveTask()
dialog.dismiss()})
原来如果我改成:
public class MainActivity extends AppCompatActivity {
至
public class MainActivity extends Activity {
问题消失了。我不知道为什么,但我会接受的。
我是 Android 开发的新手,我已经创建了我的第一个 "real" 应用程序,它执行以下操作:
- 启动 MainActivity
MainActivity 处理额外数据,然后显示扩展
Dialog
的ViewDialog
。ViewDialog
有一个showDialog()
方法,它执行以下操作来设置和显示Dialog
:protected void showDialog(final Activity activity) { dialog = new Dialog(activity); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setCancelable(false); dialog.setContentView(dialog_layout); // Set background color of the dialog ConstraintLayout currentLayout = (ConstraintLayout) dialog.findViewById(R.id.Dialog); // setup of views etc ... // Finally dislay `Dialog` dialog.show(); // Method called to start a `DialogTimer` which extends `CountDownTimer` }
MainActivity 显示
ViewDialog
如下:public class MainActivity extends AppCompatActivity { private static Context appContext; private static ViewDialog notify; protected void onCreate(Bundle savedInstanceState) { // methods and processing etc... // time to display dialog notify = new ViewDialog(mParameters, mThemeHandler ); // ******************** Show dialog box ******************* notify.showDialog(activity: this); // showDialog just calls `Dialog.show()` notify.ApplyTheme(); }
当计时器到期或用户按下按钮时,
ViewDialog
关闭,应用程序结束,代码如下:mButton1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { CancelTimer(); activity.finishAndRemoveTask(); dialog.dismiss();
问题是,当 ViewDialog
被关闭时,我偶尔会看到一条消息,显示在 AndroidManifest 文件中设置的活动 android:label
。
我不确定为什么会这样,但我 假设 它在 ViewDialog
关闭时显示 MainActivity
布局的某些项目拥有 dialog_layout
布局文件。
我摆弄了很多不同的东西并更改了 code/layouts 等等,但我一直没能找到我的错误。
有哪些指示和提示可以帮助我解决此问题? 如果需要,我很乐意提供更多详细信息。
布局和清单文件在这里:
- 清单https://pastebin.com/GL70FxGh
- activity_main.xml https://pastebin.com/qDVa0LrN
- dialog_layout.xml https://pastebin.com/RC4e6W9T
您发布的代码不足以弄清楚为什么会发生这种情况,但是有一个通用的解决方案是看不到 Activity 标题(即在清单的标签字段中设置)。
在您的 styles.xml 中声明一个新主题,例如
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:windowContentOverlay">@null</item>
</style>
然后像这样
让它成为你activity的主题 <activity
...
android:name="boha.notify.MainActivity"
android:theme="@style/AppTheme.NoActionBar">
...
</activity>
虽然我不是 100% 确定(因为这种行为可以在您 activity 的实际代码中改变)我认为这可能会有所帮助。
希望对您有所帮助。
您可以通过将 android:theme 属性设置为 @android:style/Theme.NoTitleBar 在您的 AndroidManifest.xml 元素上实现此目的,如下所示:
<activity android:name=".Activity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
notify.setOnDissmissListener({CancelTimer()
activity.finishAndRemoveTask()
dialog.dismiss()})
原来如果我改成:
public class MainActivity extends AppCompatActivity {
至
public class MainActivity extends Activity {
问题消失了。我不知道为什么,但我会接受的。