取代Toast.makeText(this, “String“, Toast.LENGTH_SHORT).show();总是报错

新建一个Java


public void SM(View view, String str) {
        Snackbar snackbar = Snackbar.make(view, str, 800);
        View snackBarView = snackbar.getView();
        snackbar.setTextColor(Color.RED);//设置文字颜色
        snackbar.getView().setBackgroundResource(R.drawable.shadow);//背景颜色及形状。
        FrameLayout.LayoutParams params =
                new FrameLayout.LayoutParams(snackBarView.getLayoutParams().width,
                        snackBarView.getLayoutParams().height);
        //限制单排10个字。
        if (str.length() > 4 && str.length() <= 10) {
            params.width = (int) dipToPx(view.getContext(), (float) str.length() * 22);
        } else if (str.length() <= 4) {
            params.width = (int) dipToPx(view.getContext(), 5 * 22);
        } else {
            params.width = (int) dipToPx(view.getContext(), 10 * 22);
        }
        snackBarView.setLayoutParams(params);
        params.gravity = Gravity.CENTER | Gravity.TOP;
        //设置文字居中
        TextView message = snackBarView.findViewById(com.google.android.material.R.id.snackbar_text);
        message.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY);
        message.setGravity(Gravity.CENTER);
        message.setMaxLines(4);
        snackbar.show();
        //Toast.makeText(view.getContext(), str, Toast.LENGTH_SHORT).show();
    }
    //获取屏幕密度
    private float getDeviceDensity(Context context) {
        DisplayMetrics dm = context.getResources().getDisplayMetrics();
        return dm.density;
    }

    //dp转px
    private float dipToPx(Context context, float dip) {
        return dip * getDeviceDensity(context) + 0.5f;
    }

在shadow.xml里:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 阴影 -->
    <item
        android:bottom="0dp"
        android:left="0dp"
        android:right="0dp"
        android:top="0dp">
        <shape android:shape="rectangle">
            <gradient
                android:angle="270"
                android:endColor="@color/grey2"
                android:startColor="@color/grey"
                android:type="linear" />
            <corners
                android:bottomLeftRadius="30dp"
                android:bottomRightRadius="30dp"
                android:topLeftRadius="30dp"
                android:topRightRadius="30dp" />
        </shape>
    </item>
    <item
        android:bottom="5dp"
        android:left="3dp"
        android:right="3dp"
        android:top="0dp">
        <shape android:shape="rectangle">
            <corners
                android:bottomLeftRadius="30dp"
                android:bottomRightRadius="30dp"
                android:topLeftRadius="30dp"
                android:topRightRadius="30dp" />
            <gradient
                android:angle="90"
                android:endColor="#E5eff1e5"
                android:startColor="#E5acda86"
                android:type="linear"
                android:useLevel="true" />
        </shape>
    </item>
</layer-list>

在需要弹窗的Activity里写:


ShowMsg showMsg = new ShowMsg();
    View vi;//全局变量
vi = findViewById(android.R.id.content);//OnCreate里写

//然后,在需要弹窗的位置
showMsg.SM(vi, "我是中国人,我爱中华人民共和国!");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白云LDC

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

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

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

打赏作者

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

抵扣说明:

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

余额充值