学而实习之 不亦乐乎

Android:Toast 与 Snackbar 加图标的使用

2022-07-15 11:05:28

Androiid 11 以前,Toast可能通过 Toast.getView() 获取 Toast 的视图并添加图标布局。但在 Android 11 及其更高的版本中,已经无法使用这个方法来获取其视图了。但可以使用 Snackbar 来实现这个功能。

1、使用 Toast

tv_toast = findViewById(R.id.tv_toast);
tv_toast.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast mToast = Toast.makeText(MainActivity.this, "上传成功",
                Toast.LENGTH_LONG);
        LinearLayout toastView = (LinearLayout) mToast.getView();
        toastView.setOrientation(LinearLayout.HORIZONTAL);
        ImageView imageCodeProject = new ImageView(getApplicationContext());
        imageCodeProject.setImageResource(R.drawable.ico_ok);
        toastView.addView(imageCodeProject, 0);
        mToast.show();
    }
});

2、使用 Snackbar

tv_snackbar = findViewById(R.id.tv_snackbar);
tv_snackbar.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Snackbar snackbar = Snackbar.make(v, "这是一个snackbar", Snackbar.LENGTH_SHORT);
        snackbar.setAction("取消", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });

        TextView textView = snackbar.getView().findViewById(com.google.android.material.R.id.snackbar_text);
        Drawable drawable = getResources().getDrawable(R.drawable.ico_ok,null);//图片自己选择
        drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
        textView.setCompoundDrawables(drawable, null, null, null);
        //增加文字和图标的距离
        textView.setCompoundDrawablePadding(20);
        textView.setGravity(Gravity.CENTER);
        snackbar.show();
    }
});