美文网首页
如何让Toast全屏且显示在屏幕顶部 ?

如何让Toast全屏且显示在屏幕顶部 ?

作者: 元亨利贞o | 来源:发表于2017-04-07 16:53 被阅读432次

    一. 非常简单, 给Toast同时设置两个Gravity值就可以了, 即同时设置Gravity.TOP (顶部对齐) 和 Gravity.FILL_HORIZONTAL (宽度全屏), 请看代码:

    private void toast() {
        // 兼容所有机型
        Toast t = new Toast(this);
        t.setDuration(Toast.LENGTH_LONG);
        t.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, getActionBarHeight());
        t.setView(createContentView("已将视频保持到本地"));
        t.show();
    
        /** 
        // 某些机型toast有圆角
        Toast t = Toast.makeText(this, "已将视频保持到本地", Toast.LENGTH_LONG);
        t.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, getActionBarHeight());
        t.show();
        */
    }
    
    @NonNull
    private TextView createContentView(String msg) {
        TextView tv = new TextView(this);
        //下面这句不能少, 否则将没有任何东西显示
        tv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        tv.setText(msg);
        tv.setGravity(Gravity.CENTER);
        int padding = (int) UIUtils.dip2px(this, 12);
        tv.setPadding(padding, padding, padding, padding);
        tv.setBackgroundColor(Color.parseColor("#88000000"));
        tv.setTextColor(Color.WHITE);
        return tv;
    }
    
    //获取ActionBar的高度
    private int getActionBarHeight() {
        TypedValue tv = new TypedValue();
        if(getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
            return TypedValue.complexToDimensionPixelOffset(tv.data, getResources().getDisplayMetrics());
        } else {
            //获取不到系统属性, 设置一个默认高度
            return (int)UIUtils.dip2px(this, 48);
        }
    }
    

    需要注意的是 (代码中已经说明, toast()方法中注释部分是使用系统API创建Toast, 未注释的是自己创建Toast的内容View) , 如果直接用系统方法创建Toast (Toast.makeText()), 在某些机型上会有一个圆角效果, 非常丑, 如下图:

    顶部全屏Toast(有圆角).png

    因此, 为了在所有机型上展示的效果一致, 最好是自己创建一个TextView, 然后设置给Toast, 效果如下:


    适配所有机型的顶部全屏Toast.png

    相关文章

      网友评论

          本文标题:如何让Toast全屏且显示在屏幕顶部 ?

          本文链接:https://www.haomeiwen.com/subject/tmbhattx.html