Toast,dialog显示

我想让toast显示在dialog前面可以怎么设置呀
现在是toast显示在dialog蒙层下

https://github.com/Blankj/AndroidUtilCode/issues/1390
更新版本到1.30.6以上。使用第三方库遇到问题可以先到issues中找找

toast修改层级,搜一下怎么修改

要让Toast显示在Dialog之前,需要设置Toast和Dialog的z-index值。z-index值越大,元素在Z轴的位置越靠前,就越在上层。具体的做法是:1. 给Toast设置较大的z-index值,例如:

.toast {
    z-index: 999;
}
  1. 给Dialog设置较小的z-index值,例如:
.dialog {
    z-index: 998;
}
  1. 由于Dialog还有一个蒙层,我们也需要设置蒙层的z-index值:
.dialog-mask {
    z-index: 997;
}
  1. 最终的z-index值顺序是:
    toast: 999
    dialog: 998
    dialog-mask: 997这样,Toast就会显示在Dialog和Dialog蒙层之前了。完整的HTML和CSS代码如下:
<div class="toast">Toast信息</div> 
<div class="dialog">Dialog内容</div>
<div class="dialog-mask"></div>

css
.toast {
    position: fixed;
    z-index: 999;
}

.dialog {
    position: fixed; 
    z-index: 998; 
}

.dialog-mask {
    position: fixed;
    z-index: 997;
} 

通过z-index的设置,我们就可以控制Toast、Dialog和Dialog蒙层的前后显示顺序。这是一个在Web开发中控制元素层级的常用方法。请检查以上代码,在本地测试,看Toast是否会显示在Dialog之前。

搜索一下就有了啊

AlertDialog.Builder builder = new AlertDialog.Builder(context);  
builder.setCancelable(false);  
builder.setMessage("Your message here");  
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {  
    public void onClick(DialogInterface dialog, int whichButton) {  
        // do something  
    }  
});  
AlertDialog dialog = builder.create();  
dialog.show();  
Toast.makeText(context, "Your toast message here", Toast.LENGTH_SHORT).show();

用的是ToastUtils的,那怎么改他层级呀

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/23297
  • 除此之外, 这篇博客: Android学习笔记(五)——Toast提示、Dialog对话框、Menu菜单中的 一、Toast。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • Toast消息提示框是轻量级的信息提醒机制,显示在应用程序界面的最上层。一般用于提示一些不那么引人注目,但是又希望用户看见的信息,无需用户自己维护它的消失。
    Toast的使用:
    1、创建Toast对象:
    通过构造方法new Toast()
    makeText()方法:设置显示内容,显示时长。
    2、设置消息提示的样式
    3、显示消息

    测试案例
    效果图:
    在这里插入图片描述
    布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="cn.edu.hznu.toast.MainActivity">
       <Button
           android:id="@+id/button1"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="长的Toast"
           android:textAllCaps="false"
           android:textSize="28sp"
           android:layout_gravity="center"/>
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="短的Toast"
            android:textAllCaps="false"
            android:textSize="28sp"
            android:layout_gravity="center"/>
        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="带有图片的Toast"
            android:textAllCaps="false"
            android:textSize="28sp"
            android:layout_gravity="center"/>
    </LinearLayout>
    
    

    类文件:

    package cn.edu.hznu.toast;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.Gravity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.Toast;
    public class MainActivity extends AppCompatActivity {
    private Button button1,button2,button3;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            button1=(Button) findViewById(R.id.button1);
            button2=(Button) findViewById(R.id.button2);
            button3=(Button) findViewById(R.id.button3);
            button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(MainActivity.this,"这是一个长的Toast",Toast.LENGTH_LONG).show();
                }
            });
            button2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(MainActivity.this,"这是一个短的Toast",Toast.LENGTH_SHORT).show();
                }
            });
            button3.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                  Toast toast=  Toast.makeText(MainActivity.this,"这是一个居中的带有图片的Toast",Toast.LENGTH_LONG);
                    toast.setGravity(Gravity.CENTER,0,0);
                    ImageView imageView=new ImageView(MainActivity.this);
                    imageView.setImageResource(R.mipmap.ic_launcher);
                    LinearLayout toastview=(LinearLayout)toast.getView();
                    toastview.addView(imageView);
                    toast.show();
                }
            });
        }
    }
    

    在这里插入图片描述
    二、Dialog对话框。
    测试案例:
    效果图:
    在这里插入图片描述
    布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="cn.edu.hznu.dialog.MainActivity">
    
    
        <Button
            android:id="@+id/button_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="普通对话框"
            android:textAllCaps="false"
            android:layout_gravity="center"
            android:textSize="28sp" />
    
        <Button
            android:id="@+id/button_2"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="单选对话框"
            android:textAllCaps="false"
            android:textSize="28sp" />
    
    </LinearLayout>
    

    类文件:

    package cn.edu.hznu.dialog;
    import android.content.DialogInterface;
    import android.os.Bundle;
    import android.support.v7.app.AlertDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    public class MainActivity extends AppCompatActivity {
        Button btn_1,btn_2;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            btn_1=(Button)findViewById(R.id.button_1);
            btn_2=(Button)findViewById(R.id.button_2);
            btn_1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this); //创建一个AlertDialog的构造器
                    builder.setIcon(R.mipmap.ic_launcher);   //设置图标
                    builder.setTitle("温馨提示");  //设置标题
                    builder.setMessage("确定要提交吗?");  //设置消息内容
                    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            finish();  //页面关闭
                        }
                    });
                    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            //添加取消按钮后的功能代码
                        }
                    });
                    builder.create().show();
                    btn_2.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this); //创建一个AlertDialog的构造器
                            builder.setIcon(R.mipmap.ic_launcher);   //设置图标
                            builder.setTitle("请选择城市");  //设置标题
                            final String[] cities={"北京", "上海", "广州", "深圳"}; //设置选项内容
                            builder.setSingleChoiceItems(cities, 0, new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                }
                            });
                            builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                }
                            });
                            builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                }
                            });
                            builder.create().show();
                        }
                    });
                }
            });
        }
    }
    
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案: 可以通过创建一个Toast的方式并将它显示在Dialog之上。具体步骤如下:

    1. 在Dialog的onCreate方法中实例化一个Toast对象,例如:
    Toast mToast = Toast.makeText(getContext(), "This is a toast.", Toast.LENGTH_SHORT);
    
    1. 正确设置Toast的显示位置,可以通过setGravity方法来实现,例如:
    mToast.setGravity(Gravity.TOP | Gravity.RIGHT, 0, 0);
    
    1. 在Dialog的onStart方法中显示Toast,例如:
    mToast.show();
    

    完整的代码示例:

    public class MyDialog extends Dialog {
    
        private Toast mToast;
    
        public MyDialog(@NonNull Context context) {
            super(context);
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.layout_dialog);
    
            // 实例化一个Toast对象
            mToast = Toast.makeText(getContext(), "This is a toast.", Toast.LENGTH_SHORT);
    
            // 设置Toast的显示位置
            mToast.setGravity(Gravity.TOP | Gravity.RIGHT, 0, 0);
        }
    
        @Override
        public void onStart() {
            super.onStart();
    
            // 显示Toast
            mToast.show();
        }
    }
    

如果你的吐司和弹窗是用的同一个context,那么正常情况下吐司是在弹窗之上的。如果吐司在弹窗之下的情况,应该是你的弹窗等级过高导致的,一般弹窗等级为2014即可