自定义Toast的显示风格美高梅网投平台,Android中

2020-03-14 03:05 来源:未知

在安卓应用中Toast的使用频率是非常高的,关于Toast的基本使用这里就不再啰嗦,这里只说一下怎么去更改Toast的显示风格,让Toast不再是千年不变的黑框框。

 

转自:

android Toast大全(五种情形)建立属于你自己的Toast

转载于:

Toast用于向用户显示一些帮助/提示。下面我做了5中效果,来说明Toast的强大,定义一个属于你自己的Toast。

1.默认效果

美高梅网投平台 1

代码

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

2.自定义显示位置效果

美高梅网投平台 2

代码

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

3.带图片效果

美高梅网投平台 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.完全自定义效果

美高梅网投平台 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.其他线程

美高梅网投平台 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=""
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=""
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>

先上效果图:

前言

Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失。下面用一个实例来看看如何使用Toast。

美高梅网投平台 6toast.gif

  本章内容是android.widget.Toast,版本为Android 2.2 r1,翻译来自"cnmahj"和"jiahuibin",欢迎大家访问他的博客:,再次感谢"cnmahj"和"jiahuibin" !欢迎你一起参与Android API 的中文翻译,联系我over140@gmail.com。

 

在Toast类中,有一个 setView 方法,该方法的作用就是用传入的view替换默认的那个黑框框。

 

1.默认效果

使用setView 方法自定义Toast时大致步骤如下:

声明

美高梅网投平台 7

  1. 通过Toast 的构造方法创建一个toast对象

  欢迎转载,但请保留文章原始出处:)

代码

  1. 使用LayoutInflater 填充一个view
  2. 将填充起来的view通过setView 设置给toast对象
  3. 调用show 展示吐司。

    博客园:

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

具体实现代码:ImageToastActivity.java

    Android中文翻译组:  

 

/** * 作者:CnPeng * <p> * 时间:2017/2/27:上午10:50 * <p> * 说明:展示带有图片的Toast,自定义吐司布局时,主要依靠setView 方法 * <p> * 关于 负的margin值的注意事项 查看 activity_imagetoast22222222222.xml */public class ImageToastActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_imagetoast); Button button =  findViewById(R.id.bt_imageToast); button.setOnClickListener; } @Override public void onClick { switch ) { case R.id.bt_imageToast: //自定义Toast 方式1 ,直接setView //填充view,官方guide说根布局必须设置id为custom_toast_container,且inflate的第二个参数必须按照这个模式写,实际测试无所谓 // View toastView = getLayoutInflater().inflate(R.layout.imagetoast, (ViewGroup)findViewById(R.id // .custom_toast_container)); // 填充view View toastView = getLayoutInflater().inflate(R.layout.imagetoast, null); Toast toast = new Toast(getApplicationContext; //构造方法创建吐司对象 toast.setDuration(Toast.LENGTH_SHORT); //设置吐司时长 //toast.setGravity(Gravity.BOTTOM | Gravity.RIGHT, 100, 300); //更改吐司的展示位置 toast.setView(toastView); //设置吐司的新view toast.show(); //展示吐司 break; } }}

 

2.自定义显示位置效果

activity的布局文件中只有一个button,代码省略。

正文

美高梅网投平台 8

布局文件:imagetoast.xml

  一、结构

代码

<?xml version="1.0" encoding="utf-8"?><RelativeLayout android: xmlns:andro android:layout_width="wrap_content" android:layout_height="wrap_content"> <!--风格2 吐司左上角展示图标--> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="28dp" android:layout_marginTop="50dp" android:background="@drawable/shape_bk_imagetoast" android:paddingBottom="10dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingTop="10dp" android:text="这是一个带有图片的Toast提示框"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher"/></RelativeLayout>

    public class Toast extends Object

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

shape_imagetoast.xml

 
    java.lang.Object
      android.widget.Toast

 

<?xml version="1.0" encoding="utf-8"?><shape xmlns:andro> <corners android:radius="10dp"/> <solid android:color="#ffdd00"/> <stroke android:color="@color/colorAccent" android:width="@dimen/dp1"/></shape>

 

3.带图片效果

注意:

  1. setView方法中传入的view可以任意定义,但需要注意的是,有些控制view位置的属性可能会不生效。比如负的margin值,具体效果将列举在文章末尾。
  2. 官方guide说根布局view必须设置id为custom_toast_container,且inflate的第二个参数必须按照这个模式写,实际测试无所谓View toastView =getLayoutInflater().inflate(R.layout.imagetoast, (ViewGroup)findViewById(R.id.custom_toast_container));

  二、概述

美高梅网投平台 9

如果要展示的Toast 只是在上方(或者下方、左方、右方)添加一个图片或者更改字号字体背景色等内容,可以直接在java代码中获取原生的布局view并去修改它。

    美高梅网投平台 10

 

大致步骤如下:

    Toast是一种提供给用户简洁信息的视图。Toast类帮助你创建和显示该信息。

代码

  1. 通过Toast 中的静态方法 makeText 创建一个Toast 对象。
  2. 通过调用toast对象的 getView 方法获取 toast展示的view
  3. 在java代码中修改Toast的显示风格
  4. 调用show 展示Toast

    该视图已浮于应用程序之上的形式呈现给用户。因为它并不获得焦点,即使用户正在输入什么也不会受到影响。它的目标是尽可能已不显眼的方式,使用户看到你提供的信息。有两个例子就是音量控制和设置信息保存成功。

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

效果图:

    使用该类最简单的方法就是调用一个静态方法,让他来构造你需要的一切并返回一个新的 Toast 对象。

 

美高梅网投平台 11toast2.gif

 

4.完全自定义效果

具体实现代码:ImageToastActivity.java

  三、常量

美高梅网投平台 12

/** * 作者:CnPeng * <p> * 时间:2017/2/27:上午10:50 * <p> * 说明:展示带有图片的Toast,自定义吐司布局时,主要依靠setView 方法 * <p> * 关于 负的margin值的注意事项 查看 activity_imagetoast22222222222.xml */public class ImageToastActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_imagetoast); Button button =  findViewById(R.id.bt_imageToast); button.setOnClickListener; } @Override public void onClick { switch ) { case R.id.bt_imageToast: //自定义Toast方式2 : 直接修改原生的toast布局(效果同setView时,view只是一个TextView的情况) Toast toast = Toast.makeText(ImageToastActivity.this, "直接改写原生的Toast布局", Toast.LENGTH_SHORT); View toastView = toast.getView(); toastView.setBackgroundResource(R.drawable.shape_bk_imagetoast); toastView.setPadding(20, 5, 20, 5); TextView tv =  toastView.findViewById(android.R.id.message); tv.setTextSize; tv.setTextColor(Color.BLUE); tv.setGravity(Gravity.CENTER); tv.setCompoundDrawablesWithIntrinsicBounds(R.mipmap.ic_launcher, 0, 0, 0); tv.setCompoundDrawablePadding; toast.show(); break; } }}

 

代码

activity的布局文件中只有Button,代码省略。

       int  LENGTH_LONG

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

注意:

 持续显示视图或文本提示较长时间。该时间长度可定制。

 

  1. toast.getView 可以获取toast展示的布局view
  2. textView 中的drawableLeft 等drawableXXX属性对应的java中的方法是:setCompoundDrawablesWithIntrinsicBounds(leftDrawable , topDrawable, rightDrawable, bottomDrawable); 该方法中传入的四个参数分别对应 drawableLeft , drawableRight, drawableTop , drawableBottom 。如果在某个方向上不需要设置图片就直接传入0。
  3. 通过查看toast的 makeText 方法的源码可以知道,默认的布局文件是:com.android.internal.R.layout.transient_notification,该文件中textView的id是 android:

       参见

5.其他线程

在这个布局文件中,使用了相对布局,先添加了一个TextView ,然后通过 layout_above 再添加一个ImageView,之后再通过负的margin值控制 imageView 与TextView的相对位置,并通过 layout_alignLeft 让图片的左边框与textView的左边框对齐。然而,这种方式在布局预览中看着是正常的,but,运行之后确实不好使,却展示成下图中的模式,没想明白为啥。如果你知道了请一定要告诉我。。。

              setDuration(int)

美高梅网投平台 13

美高梅网投平台 14Paste_Image.png

 

 代码

详细布局文件:

int  LENGTH_SHORT

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

<?xml version="1.0" encoding="utf-8"?><RelativeLayout android: xmlns:andro android:layout_width="match_parent" android:layout_height="match_parent"> <!--这种在预览的时候没问题,但实际上并不好使!!!--> <TextView android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:background="@drawable/shape_bk_imagetoast" android:paddingBottom="10dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingTop="10dp" android:text="这是一个带有图片的Toast提示框"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/tv_imagetoast" android:layout_alignLeft="@id/tv_imagetoast" android:layout_marginBottom="-15dp" android:src="@mipmap/ic_launcher"/></RelativeLayout>

持续显示视图或文本提示较短时间。该时间长度可定制。该值为默认值。

 

关于负的margin 的详细介绍,请参考我之前在CSDN中写的文章,)

       参见

 

这里只是说明一点:如果负的margin值是相对于Button的,那么button依旧会覆盖该控件!!!!如下图:

              setDuration(int)

完整代码

美高梅网投平台 15Paste_Image.png

 

1.Main,java

布局文件:

  四、构造函数

package com.wjq.toast;

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:andro android:layout_width="match_parent" android:layout_height="match_parent"> <Button android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="点击展示带有图片的Toast"/> <!--相对于Button使用负的margin值时,位置虽然发生了变化,但是button 自带的灰色背景会覆盖控件--> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/bt_imageToast" android:layout_alignLeft="@id/bt_imageToast" android:layout_marginBottom="-20dp" android:src="@mipmap/ic_launcher"/></RelativeLayout>

 

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;

以上的代码均为测试过的完整的可用的代码。也可以直接到github下载代码: , 其中的a_36 对应该文章

       public Toast (Context context)

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

       构造一个空的 Toast 对象。在调用 show() 之前,必须先调用 setView(View)。

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

(译者注:只有使用setView(View)的时候,才使用new Toast(Content content)来得到Toast对象,否则必须用makeText()方法来创建toast对象,并且这种方式获得Toast对象不能使用setText()方法。)

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

       参数

 }

              context    使用的上下文。通常是你的 Application 或 Activity 对象。 

 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;

public int cancel ()

  }

     如果视图已经显示则将其关闭,还没有显示则不再显示。一般不需要调用该方法。正常情况下,视图会在超过存续期间后消失。

 }
}

 

 

public int getDuration ()

2.main,xml

返回存续期间

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns: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>

              setDuration(int)

 

public int getGravity ()

3.custom.xml

     取得提示信息在屏幕上显示的位置。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns: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>

    请参阅

 

Gravity

setGravity()

 

public float getHorizontalMargin ()

返回横向栏外空白。

 

public float getVerticalMargin ()

返回纵向栏外空白。

 

public View getView ()

返回 View 对象。

    请参阅

setView(View)

 

public int getXOffset ()

返回相对于参照位置的横向偏移像素量。

        Toast msg = Toast.makeText(Main.this, "Message", Toast.LENGTH_LONG);

        msg.setGravity(Gravity.CENTER, msg.getXOffset() / 2, msg.getYOffset() / 2);

        msg.show();

 

public int getYOffset ()

返回相对于参照位置的纵向偏移像素量。

 

public static Toast makeText (Context context, int resId, int duration)

生成一个从资源中取得的包含文本视图的标准 Toast 对象。

    参数

context

使用的上下文。通常是你的 ApplicationActivity 对象。

resId

要使用的字符串资源ID,可以是已格式化文本。

duration

该信息的存续期间。值为 LENGTH_SHORTLENGTH_LON

     异常

      当资源未找到时抛异常Resources.NotFoundException

 

public static Toast makeText (Context context, CharSequence text, int duration)

生成一个包含文本视图的标准 Toast 对象。

    参数

context

使用的上下文。通常是你的 ApplicationActivity 对象。

resId

要显示的文本,可以是已格式化文本。

duration

该信息的存续期间。值为 LENGTH_SHORTLENGTH_LONG



public void setDuration (int duration)

设置存续期间。

    请参阅

LENGTH_SHORT

`LENGTH_LONG```

 

public void setGravity (int gravity, int xOffset, int yOffset)

设置提示信息在屏幕上的显示位置。

(译者注:自定义Toast的显示位置,例如toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0)可以把Toast定位在左上角。Toast提示的位置xOffset:大于0向右移,小于0向左移)

    请参阅

Gravity

getGravity()

 

public void setMargin (float horizontalMargin, float verticalMargin)

设置视图的栏外空白。

    参数

        horizontalMargin         容器的边缘与提示信息的横向空白(与容器宽度的比)。

           verticalMargin             容器的边缘与提示信息的纵向空白(与容器高度的比)。

 

public void setText (int resId)

更新之前通过 makeText() 方法生成的 Toast 对象的文本内容。

    参数

        resId      为 Toast 指定的新的字符串资源ID。

 

public void setText (CharSequence s)

更新之前通过 makeText() 方法生成的 Toast 对象的文本内容。

    参数``

        s   为 Toast 指定的新的文本。

public void setView (View view)

设置要显示的 View 。

(译者注:注意这个方法可以显示自定义的toast视图,可以包含图像,文字等等。是比较常用的方法。)

    请参阅

getView()

 

public void show ()

按照指定的存续期间显示提示信息。

 

  六、补充

 

       文章链接

              让Toast一直显示的解决方法

              通知 Toast详细用法(显示view)

              Android一种信息提示机制:Toast

      [推荐] android Toast大全(五种情形)建立属于你自己的Toast

       示例代码

      示例一:使用图片的Toast

 

Toast toast = new Toast(this); 
ImageView view = new ImageView(this); 
view.setImageResource(R.drawable.icon);
toast.setView(view); 
toast.show();

      示例二:带文字带图片Toast

        美高梅网投平台 16

      private void showToast() {
        // 1 创建Toast
                Toast toast = Toast.makeText(this, "图文显示", Toast.LENGTH_LONG);
        // 2 创建Layout,并设置为水平布局
                LinearLayout mLayout = new LinearLayout(this);
                mLayout.setOrientation(LinearLayout.HORIZONTAL);
                ImageView mImage = new ImageView(this); // 用于显示图像的ImageView
                mImage.setImageResource(R.drawable.icon);
                View toastView = toast.getView(); // 获取显示文字的Toast View
                mLayout.addView(mImage); // 添加到Layout
                mLayout.addView(toastView);
        // 3 关键,设置Toast显示的View(上面生成的Layout).
                toast.setView(mLayout);
                toast.show();
            }

 

 

 

      示例三:综合Toast例子

        美高梅网投平台 17

        Main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<Button android:id="@ id/button1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Toast显示View"
/>
<Button android:id="@ id/button2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Toast直接输出"
/>
<Button android:id="@ id/button3"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="VolumeToast应用"
/>
</LinearLayout>

        Toast.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ImageView android:src="@drawable/toast"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
/>
<TextView android:id="@ id/tv1"
    android:text=""
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
/>
</LinearLayout>

        Volumetoast.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=""
  android:layout_width="280dp"
  android:layout_height="wrap_content"
  android:gravity="center_horizontal"
  android:orientation="vertical"
  >
          <TextView           
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:text="Volume"
              />
              <ProgressBar 
                  android:id="@ id/progress"
                  android:layout_width="280dp"
                  android:layout_height="wrap_content"
                  android:progress="50"
                  android:max="100"
                  style="?android:attr/progressBarStyleHorizontal"
              />
</LinearLayout>

        java文件

public class toasttest extends Activity {
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button1=(Button)findViewById(R.id.button1);
        button1.setOnClickListener(bt1lis);
        Button button2=(Button)findViewById(R.id.button2);
        button2.setOnClickListener(bt2lis);
        Button button3=(Button)findViewById(R.id.button3);
        button3.setOnClickListener(bt3lis);
    }
    OnClickListener bt1lis=new OnClickListener(){
 
        @Override
        public void onClick(View v) {
            showToast();
        }
 
    };
    OnClickListener bt2lis=new OnClickListener(){
        @Override
        public void onClick(View v) {
            Toast.makeText(toasttest.this,"直接输出测试", Toast.LENGTH_LONG).show();
        }
 
    };
    OnClickListener bt3lis=new OnClickListener(){
        @Override
        public void onClick(View v) {        
            showvolumeToast();
        }
 
    };
    public void showToast(){
        LayoutInflater li=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view=li.inflate(R.layout.toast,null);
        //把布局文件toast.xml转换成一个view
        Toast toast=new Toast(this);
        toast.setView(view);
        //载入view,即显示toast.xml的内容
        TextView tv=(TextView)view.findViewById(R.id.tv1);
        tv.setText("Toast显示View内容");
        //修改TextView里的内容
        toast.setDuration(Toast.LENGTH_SHORT);
        //设置显示时间,长时间Toast.LENGTH_LONG,短时间为Toast.LENGTH_SHORT,不可以自己编辑
        toast.show();
    }
    public void showvolumeToast() {
        // TODO Auto-generated method stub
         LayoutInflater li=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View volumeView=li.inflate(R.layout.volumetoast,null);
        ((ProgressBar)volumeView.findViewById(R.id.progress)).setProgress(((ProgressBar)volumeView.findViewById(R.id.progress)).getProgress()   10);
        //这里还有点问题,就是progress的进度条不动,因为我们主要是想给大家展示
     //Toast的用法,这里就不深究了
        Toast volumeToast= new Toast(this);
        volumeToast.setGravity(Gravity.BOTTOM, 0, 100);
        volumeToast.setView(volumeView);
        volumeToast.setDuration(Toast.LENGTH_SHORT);       
        volumeToast.show();
    }
}

        备注

          我们的代码没有重复概述中的通过代码布局toast实现方法,我们是通过布局文件转换成view视图来实现复杂toast,这是两种常用的方法,大家可以根据具体情况进行选择。

        下载

          /Files/over140/2010/11/demo_Toast.rar

 

  七、不足之处

    现象:当点击一个按钮 可以显示一个四秒的toast,但是我要是连点两下就是8秒 三下十二秒
    解决办法:只用一个Toast, 自己设置toast.setText(), setDuration(); 之后无论多少次.show()都能马上更新显示, 一会就消失了

 

结束

  本文以"cnmahj"的译文为主,"jiahuibin"的备注和代码为辅。由于管理疏忽造成两人翻译重复,故本文联合署名,但"cnmahj"仅翻译了原文部分,翻译得很好,而"jiahuibin"的备注和代码截图都非常棒,整合起来就成一篇优秀的文章了,感谢两位为大家带来精彩的译文!

TAG标签:
版权声明:本文由美高梅网投平台发布于新闻中心,转载请注明出处:自定义Toast的显示风格美高梅网投平台,Android中