Android Toast位置调整

在默认的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坐标
... ...
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值