我想让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;
}
.dialog {
z-index: 998;
}
.dialog-mask {
z-index: 997;
}
<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的,那怎么改他层级呀
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();
}
});
}
});
}
}
解决方案: 可以通过创建一个Toast的方式并将它显示在Dialog之上。具体步骤如下:
Toast mToast = Toast.makeText(getContext(), "This is a toast.", Toast.LENGTH_SHORT);
mToast.setGravity(Gravity.TOP | Gravity.RIGHT, 0, 0);
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即可