android如何自定义Toast动画

android如何自定义Toast动画

本文目录

  • android如何自定义Toast动画
  • toast是什么意思
  • android开发中 怎么用toast显示当前系统时间
  • android开发 toast
  • 如何在Android开发中熟练使用五种Toast的特效
  • Android开发,弹出提示框“Toast”是什么问题
  • Android开发_弹出小小提示框_Toast
  • android的toast怎么自定义显示时间长度
  • android开发中关于toast的使用
  • android里Toast是什么意思

android如何自定义Toast动画


自定义toast动画其实是view的动画
1、构建view,替代系统的toast的view。
2、设置view的相关动画,适当的时机启动动画。(在show之后)

toast是什么意思


toast是Android系统中一种消息类型

拓展资料

Android中的Toast是一种简易的消息提示框。

当视图显示给用户,在应用程序中显示为浮动。和Dialog不一样的是,它永远不会获得焦点,无法被点击。用户将可能是在中间键入别的东西。Toast类的思想就是尽可能不引人注意,同时还向用户显示信息,希望他们看到。而且Toast显示的时间有限,Toast会根据用户设置的显示时间后自动消失。


android开发中 怎么用toast显示当前系统时间


Toast是Android系统提供的一种非常好的提醒方式,他不会占用任何的屏幕空间,所以可以将一些简短的信息通过toast的方式通知给用户,这些信息过一段时间会自动消失,非常方便,友好。
SimpleDateFormat sdf=new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss“);
String str=sdf.format(new Date());
Toast.makeText(MainActivity.this, str,Toast.LENGTH_SHORT).show();

android开发 toast


Toast toast;//成员变量
void showToast(String str){
if(toast==null){
toast = Toast.makeText(XXX,XXX,str);
}
toast.setText(str);
toast.show();
}
在click时间里面如果:
Toast.makeText(XXX,XXX,str).show();
会导致每次点击都会产生一个新的toast对象。而toast本身机制限制当前只能显示一个对象,那么反复点击就会出现排队现象。导致toast显示很多次,很长时间。
在上述方法中,由于只有一个toast对象实例,所以反复点击只是刷新了它本身显示时间,让显示时间以最后一次点击为准。防止了排队现象

如何在Android开发中熟练使用五种Toast的特效


Android五种Toast特效详解

  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();

    都可以复制到开发工具里看看实际效果的,找需要的就行了。


Android开发,弹出提示框“Toast”是什么问题


Android开发,弹出提示框“Toast”是因为输入了下面这句操作命令

Toast.makeText(getApplicationContext(),“你的提示内容“,Toast.LENGTH_SHORT).show();

Android开发操作如下:

先导入:

import android.widget.Toast;

关键代码:

Toast.makeText(getApplicationContext(),“提示内容“,Toast.LENGTH_SHORT).show();

例子:

在一个activity中,只有一个button,单击这个button弹出“单击完成”提示框。

提示:

只需在onCreante方法中添加button的单击事件

完整代码:

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_toast1);

//设置button的单击事件

findViewById(R.id.btnToast).setOnClickListener(new View.OnClickListener() {

public void onClick(View arg0) {

//弹出提示框

Toast.makeText(getApplicationContext(),“单击完成“,Toast.LENGTH_SHORT).show();

}

});

}


Android开发_弹出小小提示框_Toast


Android开发,弹出提示框“Toast”是因为输入了下面这句操作命令:

Toast.makeText(getApplicationContext(),“你的提示内容“,Toast.LENGTH_SHORT).show();

Android开发操作如下:

先导入:

import android.widget.Toast;

关键代码:

Toast.makeText(getApplicationContext(),“提示内容“,Toast.LENGTH_SHORT).show();

例子:

在一个activity中,只有一个button,单击这个button弹出“单击完成”提示框。

提示:

只需在onCreante方法中添加button的单击事件

完整代码:

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_toast1);

//设置button的单击事件

findViewById(R.id.btnToast).setOnClickListener(new View.OnClickListener() {

public void onClick(View arg0) {

//弹出提示框

Toast.makeText(getApplicationContext(),“单击完成“,Toast.LENGTH_SHORT).show();

}

});

}


android的toast怎么自定义显示时间长度


Android中Toast的显示时间为特定时间且不可更改,但是有时候我们开发设计需要让Toast显示更长时间,或者自己完全控制Toast的显示和关闭。通过查看Toast类的源码,可以看出,这有点难为它了,Toast类本身并没有提供相应方法。
  但是通过源码的查看,还是可以看出点眉头。源码分析思路在这里转eoe里的一篇文章,思路较为清晰:
  转:
  Toast信息提示框之所以在显示一定时间后会自动关闭,是因为在系统中有一个Toast队列。系统会依次从队列中取(出队列)一个Toast,并 显示它。在显示一段时间后,再关闭,然后再显示下一个Toast信息提示框。
直到Toast队列中所有Toast都显示完为止。那么有些时候需要这个Toas t信息提示框长时间显示,直到需要关闭它时通过代码来控制,而不是让系统自动来关闭Toast信息提示框。
不过这个要求对于Toast本身来说有些过 分,因为Toast类并没有提供这个功能。虽然如此,但方法总比问题多。通过一些特殊的处理还是可以实现这个功能的,而且并不复杂。
  Toast信息提示框需要调用Toast.show方法来显示。下面来看一下show方法的源代码。
  public void show() {
  if (mNextView == null) {
  throw new RuntimeException(“setView must have been called“);
  }
  INotificationManager service = getService();
  String pkg = mContext.getPackageName();
  TN tn = mTN;
  try {
  // 将当前Toast加入到Toast队列
  service.enqueueToast(pkg, tn, mDuration);
  } catch (RemoteException e) {
  // Empty
  }
  }
复制代码
  show方法的代码并不复杂,可以很容易找到如下的代码。
 
 service.enqueueToast(pkg, tn, mDuration);
复制代码
  从上面的代码可以很容易推断出它的功能是将当前的Toast加入到系统的Toast队列中。
看到这里,各位读者应该想到。虽然show方法的表面功能是显示Toast信息提示框,但其实际的功能是将Toast加入到队列中,再由系统根据Toast队列来显示Toast信息提示框。那么我们经过更进一步地思考,可以大胆地做出一个初步的方案。
既然系统的Toast队列可以显示Toast信息提示框,那么我们为什么不可以自己来显示它呢?
这样不是可以自己来控制Toast的信息提示框的显示和关闭了吗!当然,这就不能再调用show方法来显示Toast信息提示框了(因为show方法会将Toast加入队列,这样我们就控制不了Toast了)。
  既然初步方案已拟定,现在就来实施它。先在Toast类找一下还有没有其他的show方法。
结果发现了一个TN类,该类是Toast的一个内嵌类。在TN类中有一个show方法。TN是ITransientNotification.Stub的子类。从ITransientNotification和TN类中的show方法初步推断(因为Transient的中文意思是“短暂的”)系统是从Toast队列中获得了Toast对象后,利用TN对象的show方法显示Toast,再利用TN.hide方法来关闭Toast。
首先声明,这只是假设,我们还不知道这么做是否可行!当然,这也是科学研究的一般方法,先推断或假设,然后再证明推断或假设。
  现在关键的一步是获得TN对象。遗憾的是TN被声明成private类型,外部无法访问。不过别着急。在Toast类中有一个mTN变量。虽然不是public变量,但仍然可以通过反射技术访问该变量。mTN变量会在创建Toast对象时初始化。
因此,只要获得mTN变量,就获得了TN对象。下面的代码显示了一个永远不会自动关闭的Toast信息提示框。
  // 先创建一个Toast对象  Toast toast = Toast.makeText(this, “永不消失的Toast“, Toast.LENGTH_SHORT);  // 设置Toast信息提示框显示的位置(在屏幕顶部水平居中显示)  toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);  try  {
  // 从Toast对象中获得mTN变量  Field field = toast.getClass().getDeclaredField(“mTN“);
  field.setAccessible(true);
  Object obj = field.get(toast);
  // TN对象中获得了show方法
  Method method = obj.getClass().getDeclaredMethod(“show“, null);
  // 调用show方法来显示Toast信息提示框
  method.invoke(obj, null);
  }
  catch (Exception e)
  {
  }
复制代码
  上面的代码中try{…}catch(…){…}语句中的代码是关键。先利用事先创建好的Toast对象获得了mTN变量。然后再利用反射技术获得了TN对象的show方法。
  关闭Toast和显示Toast的方法类似,只是需要获得hide方法,代码如下:
  try
  {
  // 需要将前面代码中的obj变量变成类变量。这样在多个地方就都可以访问了
  Method method = obj.getClass().getDeclaredMethod(“hide“, null);
  method.invoke(obj, null);
  }
  catch (Exception e)
  {
  }
复制代码
  上面的代码已经很完美地实现了通过代码控制Toast信息提示框显示和关闭的功能。
但如果想实现得更完美,可以在Android SDK源代码中找一个叫ITransientNotification.aidl的文件(该文件是AIDL服务定义文件,将在后面详细介绍),并在Android工程的src目录中建一个android.app包,将这个文件放到这个包中。
然后ADT会自动在gen目录中生成了一个android.app包,包中有一个ITransientNotification.java文件。由于Android SDK自带的ItransientNotification接口属于内部资源,外部程序无法访问,因此,只能将从Toast对象中获得的mTN变量转换成刚才生成的ITransientNotification对象了。
这样就不需要使反射技术获得show和hide方法了。
经过改良的显示和关闭Toast信息提示框的代码如下:
  ITransientNotification notification = (ITransientNotification) field.get(toast);
  // 显示Toast信息提示框
  notification.show();
  // 关闭Toast信息提示框
  notification.hide();
复制代码
  最后整理代码如下:
  Java代码
import java.lang.reflect.Field;
  import java.lang.reflect.Method;
  import android.app.Activity;
  import android.os.Bundle;
  import android.view.Gravity;
  import android.view.View;
  import android.widget.Button;
  import android.widget.Toast;
  public class TestToastActivity extends Activity {
  private Button showtoast,closetoast;
  private Toast toast;
  private Field field;
  private Object obj;
  private Method showMethod,hideMethod;
  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  //初始化按钮组件
  showtoast = (Button)this.findViewById(R.id.showtoast);
  closetoast = (Button)this.findViewById(R.id.closetoast);
  //设置组件监听
  showtoast.setOnClickListener(new MyOnClickListener());
  closetoast.setOnClickListener(new MyOnClickListener());
  //创建Toast对象
  toast = Toast.makeText(this, “Toast自定义显示时间测试“, 1);
  toast.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL, 0, 0);
  //利用反射技术拿到mTN对象
  reflectionTN();
  }
  class MyOnClickListener implements View.OnClickListener{
  @Override
  public void onClick(View v) {
  switch (v.getId()) {
  case R.id.showtoast:
  try {
  showMethod.invoke(obj, null);//调用TN对象的show()方法,显示toast
  } catch (Exception e) {
  e.printStackTrace();
  }
  break;
  case R.id.closetoast:
  try {
  hideMethod.invoke(obj, null);//调用TN对象的hide()方法,关闭toast
  } catch (Exception e) {
  e.printStackTrace();
  }
  break;
  default:
  break;
  }
  }
  }
  private void reflectionTN() {
  try {
  field = toast.getClass().getDeclaredField(“mTN“);
  field.setAccessible(true);
  obj = field.get(toast);
  showMethod = obj.getClass().getDeclaredMethod(“show“, null);
  hideMethod = obj.getClass().getDeclaredMethod(“hide“, null);
  } catch (Exception e) {
  e.printStackTrace();
  }
  }
  }
复制代码

android开发中关于toast的使用


Toast现在也是可以全局调用啊

我这里封装了一个toast

这个解决了toast调用多次,屏幕上一直弹出的问题

调用方式

MyToast.showToast(context,“提示“,Toast.LENGTH_LONG);

那么你可以写个公共的Activity父类,让所有的子类都继承它

这样你可以再封装了下

public void showLongToast(String msg){

    MyToast.showToast(this,msg,Toast.LENGTH_LONG);

}

public void showShortToast(String msg){

MyToast.showToast(this,msg,Toast.LENGTH_SHORT);

}


android里Toast是什么意思


toast是Android系统中一种消息框类型

拓展资料

Android中的Toast是一种简易的消息提示框。

当视图显示给用户,在应用程序中显示为浮动。和Dialog不一样的是,它永远不会获得焦点,无法被点击。用户将可能是在中间键入别的东西。Toast类的思想就是尽可能不引人注意,同时还向用户显示信息,希望他们看到。而且Toast显示的时间有限,Toast会根据用户设置的显示时间后自动消失。


免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部