Toast,你想要知道的一切

一、通常的用法

Context context = getApplicationContext();
CharSequence text = "Hello,World!";
int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
toast.show();
不过呢,这是拆分式的,一般情况下一句代码:

Toast.makeText(getApplicationContext(), "Hello,World!", Toast.LENGTH_SHORT).show();
不过呢,这一般是显示在屏幕中部靠下的位置,如果要靠左靠右如何操作:

Toast toast = Toast.makeText(getApplicationContext(), "Hello,World!", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.LEFT | Gravity.BOTTOM, 0, 0);
toast.show();

二、位置选择

其中toast.setGravity()这个方法里的三个参数的意思是这样子,贴出源码:

public void setGravity(int gravity, int xOffset, int yOffset) {
    mTN.mGravity = gravity;
    mTN.mX = xOffset;
    mTN.mY = yOffset;
}
第一个,位置,第二个,x方向offset,第三个,y方向的offset;

其中第一个参数位置的值有8个,分别是:

Gravity.LEFT,Gravity.RIGHT,Gravity.BOTTOM,Gravity.TOP 加上

Gravity.LEFT | Gravity.TOP,Gravity.LEFT | BOTTOM,Gravity.RIGHT | Gravity.TOP,Gravity.RIGHT | Gravity.BOTTOM

他们的位置如下:


其中,前四者,上下左右,分别是红色标识的1,后四者,左上,左下,右上,右下的位置分别是绿色表示的2;

然后第二个参数,是x方向的偏移量,第三个参数,是y方向的偏移量;

在前四者中:

x、y如为正数,则往右下方向移动,如为负数,则往左上方向移动

在后四者中:x、y只能为正数,不能为负数(负数设置了也没用),正数的意思则是,往屏幕正中心的方向移动,

就是上面这张图片,字符串MainActivity所在的那个位置。

三、自定义Toast

普通的这种写法,只能让我们显示一个字符串,但是我要显示其他东西呢,比如,图片?嗯,这个时候自定义布局呗,代码如下:

LayoutInflater inflater = getLayoutInflater();
View convertView = inflater.inflate(R.layout.layout_toast, null);
TextView textView = convertView.findViewById(R.id.text);
textView.setText(message);
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.LEFT|Gravity.BOTTOM, 200, 200);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(convertView);
toast.show();
然后看效果:

嗯,就是左下角这个位置,x、y方向都移了200,200什么呢,什么单位呢,当然是px,像素了,在哪找到的呢,源码如下:

/**
 * Return the X offset in pixels to apply to the gravity's location.
 */
   public int getXOffset() {
       return mTN.mX;
   }

/**
 * Return the Y offset in pixels to apply to the gravity's location.
 */
   public int getYOffset() {
       return mTN.mY;
   }
这个mTN.mX与mTN.mY是什么东西,上面贴出过一份源码,xOffset与yOffset设置进来就给了它们两,

上一份源码没有注释,在这一份源码中看到了注释:Returen the X offset in pixels ......pixels,没错,就是

像素,所以就是移了200像素。

当然代码就不用解释了,很简单,通俗易懂,就是自己定义了一个layout_toast.xml而已,局部一个图片一个TextView:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/custom_toast_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/shape_background_toast"
    android:orientation="horizontal"
    android:padding="8dp">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="8dp"
        android:src="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textColor="#FFF" />
</LinearLayout>
上面有一个textView.setText(message)这个message是外界传进来的,当然也可以直接“Hello,World!”也是没问题的
四、最后Notice

如果,有自己的layout,就用setView(convertView),如果没有自己的layout,就不要去new Toast(getApplicationContext()),直接用

makeText(context,string,int)去创建Toast。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值