一.代码位置

二.引用

  1. 将JitPack存储库添加到您的构建文件中
    将其添加到存储库末尾的root build.gradle中:

    1
    2
    3
    4
    5
    6
    allprojects {
    repositories {
    ...
    maven { url 'https://jitpack.io' }
    }
    }
  2. 添加依赖项

    1
    2
    3
    4
    dependencies {
    ...
    implementation 'com.github.itemuse:XLib:Tag'
    }
  3. 初始化 Application中init

    1
    2
    3
    4
    5
    6
    7
    import cn.xy.library.XApp;
    ...
    @Override
    public void onCreate() {
    super.onCreate();
    XApp.init(this);
    }
  4. AndroidManifest.xml中添加弹出界面的activity

    1
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

三.效果图

四.需求和代码

工作中的需求,解决原生Toast在高版本平台发现连续点击之后不会弹出问题。
解决方法最终是使用WindowManager来替换原生Toast

  • 示例使用
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    XToast.getInstance()
    .Text("AAAAAA")
    .TextColor(R.color.colorPrimary) //字体颜色
    .TextSize(50) //字体大小
    .BackGroundColor(R.color.colorAccent) //背景颜色
    .LayoutParamsX(w) //偏离XToast左边距离 受Gravity影响
    .LayoutParamsY(h) //偏离XToastY坐标距离 受Gravity影响
    .Gravity(Gravity.BOTTOM) //Toast显示位置的重心设置
    .RoundedCorners(3) //背景圆角大小
    .ShowTime(XToast.LENGTH_SHORTSHORT) //显示时长
    .show();
    单例化
    1
    2
    3
    4
    5
    6
    7
    8
    public static XToast getInstance() {
    if (mToastView == null) {
    mToastView = new XToast(XApp.getApp());
    return mToastView;
    } else {
    return mToastView;
    }
    }
    通过handler通讯,将实例创建在UI线程
    1
    2
    3
    4
    5
    6
    7
    private Handler mHandler = new Handler(Looper.getMainLooper()) {
    public void handleMessage(android.os.Message msg) {
    if (msg.what == HIDE) {
    hide();
    }
    }
    };
    给view设置圆角
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    /**
    * 设置视图裁剪的圆角半径
    * @param radius 半径
    */
    public static void setRoundedCorners(View view, final int radius) {
    if (view == null) return;
    if (radius <= 0) {
    return;
    }
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
    view.setOutlineProvider(new ViewOutlineProvider() {
    @Override
    public void getOutline(View view, Outline outline) {
    outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), radius);
    }
    });
    view.setClipToOutline(true);
    }
    }
    其他的就是一些WindowManager创建流程