如何在Android中显示Toast?


445

我有一个可以拉起的滑块,然后显示地图。我可以上下移动滑块以隐藏或显示地图。当地图在最前面时,我可以处理该地图上的触摸事件。每次碰到AsyncTask都会触发,它会下载一些数据并制作一个Toast显示数据的a。尽管我在触摸事件上启动任务,但没有显示吐司,直到关闭滑盖。当滑杆关闭且地图不再显示时,Toast出现。

有任何想法吗?

好好开始任务

编辑:

public boolean onTouchEvent(MotionEvent event, MapView mapView){ 
    if (event.getAction() == 1) {
        new TestTask(this).execute();
        return true;            
    }else{
        return false;
    }
 }

并在onPostExecute烤面包

Toast.makeText(app.getBaseContext(),(String)data.result, 
                Toast.LENGTH_SHORT).show();

在new中TestTask(this),这是对MapOverlay(而非)的引用MapActivity,所以这就是问题所在。


1
这篇文章早在很久以前就得到了答复,但我认为我的评论可能仍然会对某人有所帮助。有格式正确的库Toast,请检查:stackoverflow.com/a/18280318/1891118
Oleksii K. 2014年

2
几乎所有关于Toast的内容...简单的教程.... 单击此处
Thomas Daniel

Answers:


849

为了在您的应用程序中显示Toast,请尝试以下操作:

Toast.makeText(getActivity(), (String)data.result, 
   Toast.LENGTH_LONG).show();

另一个例子:

Toast.makeText(getActivity(), "This is my Toast message!",
   Toast.LENGTH_LONG).show();

我们可以为持续时间定义两个常量:

int LENGTH_LONG长时间显示视图或文本通知。

int LENGTH_SHORT短时间内显示视图或文本通知。

自定义吐司

LayoutInflater myInflater = LayoutInflater.from(this);
View view = myInflater.inflate(R.layout.your_custom_layout, null);
Toast mytoast = new Toast(this);
mytoast.setView(view);
mytoast.setDuration(Toast.LENGTH_LONG);
mytoast.show();

3
@Elen,您需要用于制作TOASTS的Activity上下文,而不是Application上下文。
Yousha Aleayoub

1
实际上,要求活动上下文是不正确的。但是,要在活动之外(例如在系统服务中)进行敬酒,则需要访问主循环。发布我的解决方案。
ChrisCM 2015年

7
如果将其放在onClick方法中,则将getActivity()替换为getBaseContext()对我来说很有效。
爱德华

@ PhilipBelgrave-Herbert不幸的是,您的链接不再有效。
Ellen Spertus

4
Toast.makeText(MainActivity.this,message,Toast.LENGTH_LONG).show();
Shahab Einabadi

83

baseadapter使用此扩展活动

Toast.makeText(getActivity(), 
    "Your Message", Toast.LENGTH_LONG).show();

或者如果您正在使用活动或 mainactivity

Toast.makeText(MainActivity.this, 
    "Your Message", Toast.LENGTH_LONG).show();

1
没有诸如基本适配器或主要活动之类的东西,仅通过传递参数应用上下文,消息,长/短持续时间来显示吐司
Mahesh 2016年

47

句法

Toast.makeText(context, text, duration);

参数值

语境

getApplicationContext() -返回应用程序中运行的所有活动的上下文。

getBaseContext() -如果要从应用程序中的另一个上下文访问上下文,则可以访问。

getContext() -仅返回上下文视图当前正在运行的活动。

文本

text -返回“ STRING”,如果不是字符串,则可以使用强制类型转换。

 (string)num   // type caste

持续时间

Toast.LENGTH_SHORT -预定义的烤面包延迟2000毫秒

Toast.LENGTH_LONG -预定义3500毫秒的吐司延迟

milisecond -吐司延迟用户定义的毫秒(例如4000)


范例1

Toast.makeText(getApplicationContext(), "STRING MESSAGE", Toast.LENGTH_LONG).show();

范例2

Toast.makeText(getApplicationContext(), "STRING MESSAGE", 5000).show();

用户定义的烤面包延迟时间为5000毫秒。
杰·帕特尔

很好的解释,但是您需要用于制作TOASTS的Activity上下文,而不是Application上下文。
Yousha Aleayoub

好吧,好吧,例如(string)num之类的类型转换还没有引入Java。尝试使用Integer.toString()或类似的方法。
Mostowski

2
设置烤面包的持续时间是不可能的,只能是预定义的时间LENGTH_SHORT和LENGTH_LONG
Jorgesys

23

在Android中敬酒

Toast.makeText(MainActivity.this, "YOUR MESSAGE", LENGTH_SHORT).show();

要么

Toast.makeText(MainActivity.this, "YOUR MESSAGE", LENGTH_LONG).show();

(LENGTH_SHORT和LENGTH_LONG充当布尔标志-这意味着您无法将Toast Timer发送到毫秒,但您需要使用这两个选项中的任何一个)


6
阅读文档,您将只选择Toast.LENGTH_SHORT或Toast.LENGTH_LONG作为消息持续时间。
Jorgesys

20

您可以自定义Tost:

LayoutInflater mInflater=LayoutInflater.from(this);

View view=mInflater.inflate(R.layout.your_layout_file,null);
Toast toast=new Toast(this);
toast.setView(view);
toast.setDuration(Toast.LENGTH_LONG);
toast.show();

或一般方式:

Toast.makeText(context,"Your message.", Toast.LENGTH_LONG).show();

1
正确-这是GitHub上真实项目的一些示例-codota.com/android/methods/android.widget.Toast/show
drorw

15

我尝试了几次吐司,对于那些他们的吐司给他们带来错误的人,请尝试

Toast.makeText(getApplicationContext(), "google", Toast.LENGTH_LONG).show();

14

有两种方法可以做到这一点。

使用内置的Toast消息

//Toast shown for  short period of time 
Toast.makeText(getApplicationContext(), "Toast Message", Toast.LENGTH_SHORT).show();

//Toast shown for long period of time
Toast.makeText(getApplicationContext(), "Toast Message", Toast.LENGTH_LONG).show();

或通过提供自定义布局文件来进行自定义

Toast myToast = new Toast(getApplicationContext());
myToast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
myToast.setDuration(Toast.LENGTH_LONG);
myToast.setView(myLayout);
myToast.show();

1
很好的解释,但是您需要用于制作TOASTS的Activity上下文,而不是Application上下文。
Yousha Aleayoub

android docs特别提到了应用程序上下文:“此方法采用三个参数:应用程序上下文,文本消息和Toast的持续时间。它返回正确初始化的Toast对象。”
lgunsch '17

9

我在这里遇到了所有答案,并且被似乎有人在四处闲逛的事实所吸引,他们认为需要活动上下文。不是这种情况。但是,要求从主事件或UI线程发布Toast。因此,要使它在活动上下文之外运行有点棘手。这是一个可以在系统服务或最终从中继承的任何潜在类中使用的示例Context

public class MyService extends AccessibilityService {

    public void postToastMessage(final String message) {
        Handler handler = new Handler(Looper.getMainLooper());

        handler.post(new Runnable() {

            @Override
            public void run() {
                Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
            }
        });
    }
}

请注意,我们不需要访问它的实例Activity即可正常工作。请停止暗示这种情况!如果Activity需要的话,方法签名不会要求Context


8
Toast.makeText(app.getBaseContext(),"your string",Toast.LENGTH_SHORT).show();

而不是使用“ app.getBaseContext()”。

您可以尝试使用“ getApplicationContext() ”或“ getContext() ”。

如果您的代码处于活动状态,则应使用“ Activty.this”中的“ this”。
如果您的代码是片段,则应使用“ getActivity()”


7

如果是碎片

Toast.makeText(getActivity(), "this is my Toast message!!! =)",
                   Toast.LENGTH_LONG).show();

6

要显示Toast,请使用以下代码:

Toast toast = new Toast(getApplicationContext());

toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);

toast.setDuration(Toast.LENGTH_LONG);

toast.show();

5
 Toast toast=Toast.makeText(getApplicationContext(),"Hello", Toast.LENGTH_SHORT);
 toast.setGravity(Gravity.CENTER, 0, 0); // last two args are X and Y are used for setting position
 toast.setDuration(10000);//you can even use milliseconds to display toast
 toast.show();**//showing the toast is important**

5

简单方法

toast("Your Message")

要么

toast(R.string.some_message)

只需在中添加两个方法BaseActivityBaseActivity如果尚未使用,请创建一个。

public class BaseActivity extends AppCompatActivity {
    public void toast(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

    public void toast(@StringRes int msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }
}

并通过扩展您的所有活动BaseActivity

public class MainActivity extends BaseActivity

3

最简单的方法!(要显示在您的主要活动中,请用“第一参数”替换其他活动)

Button.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v){
        Toast.makeText(MainActivity.this,"Toast Message",Toast.LENGTH_SHORT).show();
    }
}

2

这为我工作:

Toast.makeText(getBaseContext(), "your text here" , Toast.LENGTH_SHORT ).show();

2

在此处输入图片说明

必须阅读:Android Toast示例

句法

Toast.makeText(context, text, duration);

您可以使用getApplicationContext()getActivity()MainActivity.this(如果“活动名称”为MainActivity)

Toast.makeText(getApplicationContext(),"Hi I am toast",Toast.LENGTH_LONG).show();

要么

Toast.makeText(MainActivity.this,"Hi I am Toast", Toast.LENGTH_LONG).show();

2

入门方式

Toast.makeText(this, "Hello World", Toast.LENGTH_SHORT).show();

1

从服务中展示吐司

public class ServiceA extends Service {
    //....
    public void showToast(final String message) {
        Handler handler = new Handler(Looper.getMainLooper());
        handler.post(new Runnable() {

            @Override
            public void run() {
                Toast.makeText(getContext(), message, Toast.LENGTH_LONG).show();
            }
        });
    }
    //....
}

您还可以将showToast方法放在Application类中,并在任何地方显示吐司。


1

如果您想在活动中写一个简单的吐司: Toast.makeText(getApplicationContext(),"Hello",Toast.LENGTH_SHORT).show();

1.在Toast中显示TextView:-

TextView tv = new TextView(this); tv.setText("Hello!"); tv.setTextSize(30); tv.setTextColor(Color.RED); tv.setBackgroundColor(Color.YELLOW);

2.将图像显示为烤面包:-

ImageView iv = new ImageView(this); iv.setImageResource(R.drawable.blonde); Toast t = new Toast(this); t.setView(iv); t.setDuration(Toast.LENGTH_LONG); t.show();

3.将布局显示为Toast:-

LayoutInflater li = getLayoutInflater(); View view = li.inflate(R.layout.my_toast_layout,null,false); Toast t = new Toast(this); t.setView(view); t.setDuration(Toast.LENGTH_LONG); t.show();

**如果您想在异步中编写吐司,则: private Activity activity; private android.content.Context context; this.activity = activity; this.context = context; Toast.makeText(context, "Hello", Toast.LENGTH_SHORT).show();


1

这是另一个:

refreshBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getBaseContext(),getText(R.string.refresh_btn_pushed),Toast.LENGTH_LONG).show();
            }
        });

在哪里Toast

Toast.makeText(getBaseContext(),getText(R.string.refresh_btn_pushed),Toast.LENGTH_LONG).show();

strings.xml

<string name="refresh_btn_pushed">"Refresh was Clicked..."</string>


1

内部片段(onCreateView)

Toast.makeText(getActivity(), "your message" , Toast.LENGTH_LONG).show();

内部类(onCreate)

Toast.makeText(myClassName.this, "your message" , Toast.LENGTH_LONG).show();

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.