`
咖啡动力
  • 浏览: 440482 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

自定义Android,toast,以及多线程toast

 
阅读更多
Toast用于向用户显示一些帮助/提示。定义一个属于你自己的Toast。
举例5种效果

1.默认效果



代码

Toast.makeText(getApplicationContext(), "默认Toast样式",
     Toast.LENGTH_SHORT).show();



2.自定义显示位置效果



代码

toast = Toast.makeText(getApplicationContext(),
     "自定义位置Toast", Toast.LENGTH_LONG);
   toast.setGravity(Gravity.CENTER, 0, 0);
   toast.show();



3.带图片效果





代码

toast = Toast.makeText(getApplicationContext(),
     "带图片的Toast", Toast.LENGTH_LONG);
   toast.setGravity(Gravity.CENTER, 0, 0);
   LinearLayout toastView = (LinearLayout) toast.getView();
   ImageView imageCodeProject = new ImageView(getApplicationContext());
   imageCodeProject.setImageResource(R.drawable.icon);
   toastView.addView(imageCodeProject, 0);
   toast.show();



4.完全自定义效果



代码

LayoutInflater inflater = getLayoutInflater();
   View layout = inflater.inflate(R.layout.custom,
     (ViewGroup) findViewById(R.id.llToast));
   ImageView image = (ImageView) layout
     .findViewById(R.id.tvImageToast);
   image.setImageResource(R.drawable.icon);
   TextView title = (TextView) layout.findViewById(R.id.tvTitleToast);
   title.setText("Attention");
   TextView text = (TextView) layout.findViewById(R.id.tvTextToast);
   text.setText("完全自定义Toast");
   toast = new Toast(getApplicationContext());
   toast.setGravity(Gravity.RIGHT | Gravity.TOP, 12, 40);
   toast.setDuration(Toast.LENGTH_LONG);
   toast.setView(layout);
   toast.show();



5.其他线程



代码

new Thread(new Runnable() {
    public void run() {
     showToast();
    }
   }).start();





完整代码

1.Main,java

package com.wjq.toast;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class Main extends Activity implements OnClickListener {
Handler handler = new Handler();

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  findViewById(R.id.btnSimpleToast).setOnClickListener(this);
  findViewById(R.id.btnSimpleToastWithCustomPosition).setOnClickListener(
    this);
  findViewById(R.id.btnSimpleToastWithImage).setOnClickListener(this);
  findViewById(R.id.btnCustomToast).setOnClickListener(this);
  findViewById(R.id.btnRunToastFromOtherThread).setOnClickListener(this);

}

public void showToast() {
  handler.post(new Runnable() {

   @Override
   public void run() {
    Toast.makeText(getApplicationContext(), "我来自其他线程!",
      Toast.LENGTH_SHORT).show();

   }
  });
}

@Override
public void onClick(View v) {
  Toast toast = null;
  switch (v.getId()) {
  case R.id.btnSimpleToast:
   Toast.makeText(getApplicationContext(), "默认Toast样式",
     Toast.LENGTH_SHORT).show();
   break;
  case R.id.btnSimpleToastWithCustomPosition:
   toast = Toast.makeText(getApplicationContext(),
     "自定义位置Toast", Toast.LENGTH_LONG);
   toast.setGravity(Gravity.CENTER, 0, 0);
   toast.show();
   break;
  case R.id.btnSimpleToastWithImage:
   toast = Toast.makeText(getApplicationContext(),
     "带图片的Toast", Toast.LENGTH_LONG);
   toast.setGravity(Gravity.CENTER, 0, 0);
   LinearLayout toastView = (LinearLayout) toast.getView();
   ImageView imageCodeProject = new ImageView(getApplicationContext());
   imageCodeProject.setImageResource(R.drawable.icon);
   toastView.addView(imageCodeProject, 0);
   toast.show();
   break;
  case R.id.btnCustomToast:
   LayoutInflater inflater = getLayoutInflater();
   View layout = inflater.inflate(R.layout.custom,
     (ViewGroup) findViewById(R.id.llToast));
   ImageView image = (ImageView) layout
     .findViewById(R.id.tvImageToast);
   image.setImageResource(R.drawable.icon);
   TextView title = (TextView) layout.findViewById(R.id.tvTitleToast);
   title.setText("Attention");
   TextView text = (TextView) layout.findViewById(R.id.tvTextToast);
   text.setText("完全自定义Toast");
   toast = new Toast(getApplicationContext());
   toast.setGravity(Gravity.RIGHT | Gravity.TOP, 12, 40);
   toast.setDuration(Toast.LENGTH_LONG);
   toast.setView(layout);
   toast.show();
   break;
  case R.id.btnRunToastFromOtherThread:
   new Thread(new Runnable() {
    public void run() {
     showToast();
    }
   }).start();
   break;

  }

}
}



2.main,xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:padding="5dip" android:gravity="center">
<Button android:layout_height="wrap_content"
  android:layout_width="fill_parent" android:id="@+id/btnSimpleToast"
  android:text="默认"></Button>
<Button android:layout_height="wrap_content"
  android:layout_width="fill_parent" android:text="自定义显示位置"
  android:id="@+id/btnSimpleToastWithCustomPosition"></Button>
<Button android:layout_height="wrap_content"
  android:layout_width="fill_parent" android:id="@+id/btnSimpleToastWithImage"
  android:text="带图片"></Button>
<Button android:layout_height="wrap_content"
  android:layout_width="fill_parent" android:text="完全自定义"
  android:id="@+id/btnCustomToast"></Button>
<Button android:layout_height="wrap_content"
  android:layout_width="fill_parent" android:text="其他线程"
  android:id="@+id/btnRunToastFromOtherThread"></Button>

</LinearLayout>



3.custom.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:background="#ffffffff" android:orientation="vertical"
android:id="@+id/llToast" >
<TextView
  android:layout_height="wrap_content"
  android:layout_margin="1dip"
  android:textColor="#ffffffff"
  android:layout_width="fill_parent"
  android:gravity="center"
  android:background="#bb000000"
  android:id="@+id/tvTitleToast" />
<LinearLayout
  android:layout_height="wrap_content"
  android:orientation="vertical"
  android:id="@+id/llToastContent"
  android:layout_marginLeft="1dip"
  android:layout_marginRight="1dip"
  android:layout_marginBottom="1dip"
  android:layout_width="wrap_content"
  android:padding="15dip"
  android:background="#44000000" >
  <ImageView
   android:layout_height="wrap_content"
   android:layout_gravity="center"
   android:layout_width="wrap_content"
   android:id="@+id/tvImageToast" />
  <TextView
   android:layout_height="wrap_content"
   android:paddingRight="10dip"
   android:paddingLeft="10dip"
   android:layout_width="wrap_content"
   android:gravity="center"
   android:textColor="#ff000000"
   android:id="@+id/tvTextToast" />
</LinearLayout>
</LinearLayout>

分享到:
评论
1 楼 liyan12167 2011-08-12  
其中来自其他线程的toast报错

相关推荐

    Android Toast 自定义背景、图片 随心使用

    本篇文章将深入探讨如何在Android中自定义`Toast`的背景和添加图片,以实现更加个性化的用户体验。 首先,我们要了解`Toast`的基本用法。在Android中,我们可以通过`Toast.makeText()`方法来创建一个`Toast`实例,...

    Android高级应用源码-自定义彩色Toast.zip

    8. **多线程问题** 注意,Toast操作应在主线程中执行,因为UI更新必须在主线程进行。如果在子线程中创建或显示Toast,可能会导致ANR(Application Not Responding)错误。 9. **生命周期管理** 在Activity的生命...

    Android例子源码自定义彩色Toast.zip

    8. 多线程考虑:考虑到UI操作必须在主线程执行,源码中可能包含了确保在主线程中创建和显示Toast的逻辑,如使用Handler或者runOnUiThread()方法。 9. 代码注释与文档:良好的源码应当有清晰的注释,解释关键部分的...

    Qt仿Android的toast控件效果

    7. **线程安全**:考虑到多线程环境,需要确保对toast实例的操作是线程安全的。可以使用Qt的信号和槽机制,在主线程和工作线程之间进行通信,以确保数据同步。 通过以上步骤,我们就可以在Qt环境中实现一个功能完备...

    Android-AndroidToast工具类

    以下是对`AndroidToast`以及`ToastUtils`工具类的详细讲解。 ### Android Toast `Toast`是Android SDK中的一个类,它提供了一种简单的方法来显示包含文本信息的小型视图。`Toast`有三种显示时长:`LENGTH_SHORT`、...

    Toast用法详解(各种自定义Toast)实例

    以上就是关于Android中`Toast`的使用详解,包括基础用法、自定义布局、位置调整、动画效果、多行显示以及线程安全和延迟显示等多个方面。理解并熟练掌握这些技巧,将使你的Android应用交互更加友好和个性化。

    Toast的几行代码

    接下来,我们将会深入探讨`Toast`的使用方法,以及如何自定义`Toast`以满足更个性化的展示需求。 1. **基础使用** 创建一个基本的`Toast`非常简单,只需要以下几步: ```java Toast.makeText(context, "这是一条...

    android 解决Toast重复显示问题

    然而,在某些情况下,我们可能会遇到`Toast`重复显示的问题,这可能是由于不当的调用或者多线程环境中的并发问题导致的。本文将深入探讨这个问题,并提供解决方案。 首先,我们要理解`Toast`的工作原理。`Toast`在...

    自定义Toast

    然而,原生的`Toast`存在一些限制,例如显示速度较慢,不能同时显示多个,以及动画效果相对单一。在标题为“自定义Toast”的主题中,开发者尝试通过模拟手游中的疯狂点击效果,实现多`Toast`同时出现的快速响应功能...

    Bamboy自定义Toast

    6. 处理多线程问题:如果`Toast`在非主线程中显示,需要确保在正确的线程中进行显示操作,通常使用`runOnUiThread`或`Handler`来处理。 7. 销毁`Toast`:当不再需要`Toast`时,可以调用`cancel()`方法来取消显示,...

    Android-toast的基本封装包括单例化成功和失败的提示吐司

    在上述`MyToast`类中,我们创建了一个静态内部类`SingletonHolder`,确保在多线程环境下安全地初始化`instance`。`getInstance()`方法用于获取单例,`showSuccess()`和`showError()`方法则分别用于显示成功的提示...

    android的Toast提示框优化

    考虑到`Toast`可能会在多个线程中使用,确保其线程安全是必要的。可以使用`Handler`或者`runOnUiThread()`来保证`Toast`在主线程中显示。 9. **缓存机制** 如果频繁地创建和销毁`Toast`对象,可能会对性能产生...

    安卓Android源码——五种不同的Toast效果.zip

    6. **多线程环境下的Toast** - 如果在非主线程中显示Toast,必须确保操作在Handler或者`runOnUiThread()`方法中执行,因为UI操作必须在主线程进行。 7. **自定义Toast的背景颜色和文字样式** - 通过设置TextView...

    Android Toast

    在Android开发中,`Toast`是...通过以上讲解,你应该对如何在Android应用中使用`Toast`以及其在数据加载、内容加载和网络图片加载提示中的应用有了清晰的理解。在实际开发中,灵活运用这些知识可以提高应用的用户体验。

    安卓自定义控件相关-五种效果的Toast.rar

    7. 多线程问题: Toast的创建和显示应确保在主线程中进行,因为UI操作必须在主线程。如果在子线程中创建,需要使用runOnUiThread方法或Handler。 8. 代码复用: 良好的代码组织可以使自定义Toast易于复用。可以将...

    Toast的各种用法

    本篇文章将深入探讨`Toast`的各种用法,包括基本用法、自定义样式以及一些实用技巧。 ### 1. `Toast`的基本用法 在Android中,`Toast`类提供了一种简单的方法来显示消息。创建`Toast`的基本步骤如下: ```java //...

    Android高级应用源码-五种效果的Toast.zip

    6. **多线程与Handler** 如果需要在非主线程中使用Toast,必须确保所有的UI操作都在主线程进行。可以使用Handler或`runOnUiThread()`方法来确保这一点。 7. **自定义Duration** 默认的Toast显示时长有短(LENGTH_...

    五种不同的Toast效果.zip

    这个压缩包“五种不同的Toast效果.zip”可能包含了一些自定义实现的`Toast`效果示例,让我们来详细探讨一下`Toast`以及如何在Android中实现各种自定义效果。 `Toast`的基本用法: `Toast`类在Android SDK中提供了...

Global site tag (gtag.js) - Google Analytics