【问题标题】:Android Java: How do I prevent my Dialog box from showing MainActivity appname briefly when the Dialog closes?Android Java:当对话框关闭时,如何防止我的对话框短暂显示 MainActivity 应用程序名称?
【发布时间】:2019-10-02 18:50:15
【问题描述】:

我对 Android 开发还很陌生,我创建了我的第一个“真正的”应用程序,它执行以下操作:

  • 启动 MainActivity
  • MainActivity 处理额外数据,然后显示一个扩展DialogViewDialogViewDialog 有一个 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

Video of what is happening

我不确定为什么会发生这种情况,但我假设ViewDialog 关闭时它使用它自己的 dialog_layout 布局文件显示 MainActivity 布局的某些项目。

我摆弄了很多不同的东西并更改了代码/布局等,但我无法找到我的错误。

有哪些指针和提示可以帮助我解决这个问题? 如果需要,我很乐意提供更多详细信息。

布局和清单文件在这里:

【问题讨论】:

  • 当您说“显示消息”时,您到底看到了什么?
  • 你能贴出对话框关闭后看到的消息的截图吗?
  • 同样在你的activity_main.xml文件中你放置了主布局0dp的宽度和高度。只需将其设置为 mach_parent 即可在整个屏幕中展开。
  • @flopshot 运行 Android 5.1 和 9.0 的手机和平板电脑。顺便说一句,我也在拉斯维加斯.... :-)
  • 浏览这个Link。希望你能找到有用的东西

标签: java android android-layout android-dialog


【解决方案1】:

您可以通过在 AndroidManifest.xml 中的元素上将 android:theme 属性设置为 @android:style/Theme.NoTitleBar 来实现这一点,如下所示:

<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>

【讨论】:

  • 谢谢。我会试一试的。
  • 也试过了。没用。谢谢你的尝试。 :-)
  • 这“有效”,但它还在显示对话框之前显示主活动窗口。我希望应用只显示对话框...
【解决方案2】:

您发布的代码不足以弄清楚为什么会发生这种情况,但是有一个通用的解决方案是看不到 Activity 标题(即在清单的标签字段中设置)。

在你的styles.xml中声明一个新的主题

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:windowContentOverlay">@null</item>
</style>

然后让它成为你活动的主题,就像这样

 <activity
           ...
           android:name="boha.notify.MainActivity"
           android:theme="@style/AppTheme.NoActionBar">
           ...
</activity>

虽然我不能 100% 确定(因为这种行为可以在您的活动的实际代码中进行更改),但我认为它可能会有所帮助。

我希望它会有所帮助。

【讨论】:

  • 谢谢保罗。我会试一试的。
  • 保罗,我试过了,但没用。我确实注意到,当我设置活动的标题时,在代码中使用setTitle() 到一个很长的字符串,我可以非常清楚地看到对话框关闭时显示的类似“toast”的小消息是主要活动的标题。我将链接到一个视频,展示即将发生的事情。
  • Paul,您还需要查看我的代码中的哪些内容?我无法显示所有代码。也许我会创建一个minimal reproducible example 来发帖。
【解决方案3】:

事实证明,如果我改变:

public class MainActivity extends AppCompatActivity {

public class MainActivity extends Activity {

问题消失了。我不知道为什么,但我会接受的。

【讨论】:

    【解决方案4】:
    notify.setOnDissmissListener({CancelTimer()
        activity.finishAndRemoveTask()
        dialog.dismiss()})
    

    【讨论】:

    • 谢谢。我也试试看。
    • 再次感谢,我试过了。没区别。我一定是做错了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多