Android Toast位置调整

文章介绍了如何在Android开发中改变Toast的显示位置。一方面,可以通过Toast类的setGravity()方法在应用层控制其位置,调整gravity、xOffset和yOffset参数。另一方面,对于系统级别的统一控制,可以修改系统源码中的Gravity和坐标值来实现所有Toast的默认位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在默认的android系统中,Toast的位置默认是在屏幕正下方。但是开发过程中,可能需要将Toast显示在不同的位置,这时就需要重定义Toast的位置。可以分为两个方面,一个是从应用层控制,另一个是从系统层来控制;

目录

1,应用层控制Toast位置
2,系统层统一控制Toast位置

1,应用层控制Toast位置

Toast.java提供了setGravity()方法,官方文档中该方法是这样描述的:

public void setGravity(int gravity, int xOffset, int yOffset) {
throw new RuntimeException(Stub!);
}

**第一个参数:**表示具体的位置,可以使用Gravity.CENTER、Gravity.TOP、Gravity.LEFT等表示;
**第二个参数:**表示可移动的方向,左右方向,如果想向右移动,设置改参数大于0就可以了,如果是0则不移动;
**第三个参数:**它的功能与第二个参数相同,它表示上下方向,如果想向下移动,增大该参数就可以了;
注意:后两个参数的单位都指的是像素

使用实例如下:

Toast mToast =Toast.makeText(this,"this is a toast",Toast.LENGTH_LONG);
mToast.setGravity(Gravity.CENTER,100,280);
mToast.show();

2,系统层统一控制Toast位置

对于一个完整的系统开发来说,不同的项目可能对Toast的弹出位置有着不同的定义,比如有的项目希望所有的toast弹出位置固定在屏幕正上方。这种需求,APP可以通过上面的做法完整,但是缺点是每个APP都需要适配,所以最合适的做法应该是从系统层直接写死。
根据上面提供给App的方法参数,可以判定是需要从系统层修改Gravity信息和X、Y坐标即可,只需要修改文件Toast.java;

 public Toast(@NonNull Context context, @Nullable Looper looper) {
        mContext = context;
        mTN = new TN(context.getPackageName(), looper);
        mTN.mY = context.getResources().getDimensionPixelSize(
                com.android.internal.R.dimen.toast_y_offset);
        mTN.mGravity = context.getResources().getInteger(
                com.android.internal.R.integer.config_toastDefaultGravity);
        mTN.mGravity = Gravity.CENTER;//重定义gravity信息
    }

然后重写写死x、y坐标即可:

public void handleShow(IBinder windowToken) {
... ...
	if ((gravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.FILL_VERTICAL) {
		mParams.verticalWeight = 1.0f;
	}
	mParams.x = mX;
	mParams.y = mY;
 	mParams.x = 100; //重写x坐标
 	mParams.y = 280;//重写Y坐标
... ...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

与水同流

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值