Android Java:ダイアログが閉じたときにダイアログボックスにMainActivityアプリ名が一瞬表示されないようにするにはどうすればよいですか?


8

私はAndroid開発にかなり慣れていないため、次のことを行う最初の「実際の」アプリケーションを作成しました。

  • MainActivityを起動します
  • MainActivityは追加データを処理しViewDialog、拡張するを表示しますDialogViewDialogには、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();
    

問題は、が閉じられると、AndroidManifestファイルで設定されてViewDialogいるアクティビティandroid:labelを表示しているメッセージのように見える場合があることです。

何が起こっているかのビデオ

なぜこれが発生するのかはわかりませんが、独自のレイアウトファイルを使用するを閉じるときに、レイアウトのアイテムが表示されている思います。MainActivityViewDialogdialog_layout

私は非常に多くの異なるものをいじり、コード/レイアウトなどを変更しましたが、自分のエラーを見つけることができませんでした。

これを修正するのに役立つポインタとヒントは何ですか?必要に応じて詳細をお知らせいたします。

レイアウトとマニフェストファイルは次のとおりです。


2
「メッセージを表示する」と言うと、正確には何が見えますか?
フロップショット

2
ダイアログが閉じられた後に表示されるメッセージのスクリーンショットを投稿できますか?
Hamza

また、activity_main.xmlファイルで、メインレイアウトの幅と高さを0dpに設定しました。すべての画面で展開できるように、mach_parentにします。
Hamza

1
Android 5.1および9.0を実行している@flopshotスマートフォンおよびタブレット。ところで、私はラスベガスにもいます... :
キメラ

1
このリンクを通過します。あなたが何か役に立つものを見つけられることを願っています
Alfaizkhan

回答:


3

これは、次のように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>

ありがとうございました。やってみます。
キメラ

それも試しました。うまくいきませんでした。試していただきありがとうございます。:-)
キメラ

これは「機能」しますが、ダイアログを表示する前にメインアクティビティウィンドウも表示します。アプリにダイアログのみを表示させたい...
Chimera

2

あなたが投稿したコードは、なぜこれが起こっているのかを理解するのに十分ではありませんが、アクティビティのタイトルを表示しない一般的な解決策が1つあります(マニフェストのラベルフィールドに設定されています)。

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()と、非常に長い文字列を使用するコードで、ダイアログが閉じるときに表示される小さな「トースト」のようなメッセージがメインアクティビティのタイトルであることがはっきりとわかりました。すぐに何が起こっているかを示すビデオにリンクします。
キメラ

ポール、また私のコードの他に何を見る必要がありますか?すべてのコードを表示することはできません。おそらく、投稿する最小限の再現可能な例を作成します。
キメラ

2

私が変更した場合:

public class MainActivity extends AppCompatActivity {

public class MainActivity extends Activity {

問題はなくなります。理由はわかりませんが、取ります。


2
notify.setOnDissmissListener({CancelTimer()
    activity.finishAndRemoveTask()
    dialog.dismiss()})

1
ありがとうございました。これもやってみます。
キメラ

1
改めてありがとうございます。違いはありませんでした。私は根本的に悪いことをしているに違いない。
キメラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.