想到啥写啥第一期:Notification消息通知+自定义toast的展示界面

坚强是说给别人听的谎言 提交于 2020-01-22 14:06:19

想到啥写啥第一期:致力于更简单易懂的代码解决我们安卓小白遇到的问题


今天写两个小东西,感觉应该是互不相关的吧,反正随便写啦,代码也不多,Notification+自定义toast的展示界面。


1.notification用于消息通知,就是别人发短信过来的接受消息时候的那种功能

2.自定义toast就广泛多了,玩游戏获取什么奖励时候弹出来的那个一般就是ImageView+TextView 的toast

好了废话不多说,上代码

.java

myNotification

public class MyNotification extends AppCompatActivity {
    private Notification notification;
    private Notification.Builder builder;
    private NotificationManager manager;
    private Button button;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.toast);
        button = findViewById(R.id.button);
//  这三个参数实例化的方式都不相同,要多练练才能记得牢
// manager的实例化有点像fragmenManger的实例化
        manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        Intent intent = new Intent(this,MyToast.class);
        //final好像是因为下面的调用自动帮我加的,写的时候可以不记加不加
        //pendingIntent用于消息框点击消息进行跳转的类,讲道理,应该可以有其他的应用场所
        final PendingIntent pIntent =  PendingIntent.getActivity(this,1,
                intent,1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (Build.VERSION.SDK_INT<26){
                //根据SDK版本不同选取不同的方法实例化
                    builder = new Notification.Builder(MyNotification.this);
                }else {
                    builder =  new Notification.Builder(MyNotification.this,"0");
                    NotificationChannel channel = new NotificationChannel(
                            "0","通道名",NotificationManager.IMPORTANCE_HIGH);
                            //记住,channel被创建进了manager,不是builder,有点绕
                    manager.createNotificationChannel(channel); 
					//用来设计显示的消息有什么内容,见名知意我就不多赘述了
                   builder.setContentTitle("水煮蛋")
                            .setContentText("荷包蛋")
                            .setContentIntent(pIntent)
                            .setSubText("滚蛋")
                            .setSmallIcon(R.drawable.ic_launcher_foreground)
                            .setLargeIcon(BitmapFactory.decodeResource(getResources(),
                                    R.drawable.ic_launcher_background))//这两个图标的显示图片的方式有点不一样,要练练
                            .setAutoCancel(true)
                            .setWhen(System.currentTimeMillis())
                            .setTicker("王八蛋");
                    notification = builder.build();
                    //notify是用来显示消息的,cancel是用来取消这个消息显示的,很多弹出式的都有这类特性方法,记就完事了,至于第一个参数为什么要这么写,我也不知道......(请饶恕我的 无知)
                    manager.notify(0x0001,notification);
//                    manager.cancel(0x0001);
                }
            }
        });
    }
}

notification的演示就写完了,跳转的那个页面叫MyToast就是我自定义的toast

自定义的toast

现在讲自定义toast,代码其实很简答,它总的方法也不多,嘿嘿

.java

public class MyToast extends AppCompatActivity{
    private Button button;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.toast);
        button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast toast = new Toast(MyToast.this);
                View view = LayoutInflater.from(getApplicationContext())
                        .inflate(R.layout.toast_item,null);
//                ImageView imageView = view.findViewById(R.id.imageView2);
//                imageView.setImageResource(R.drawable.ic_launcher_background);
                toast.setView(view);
                toast.setDuration(Toast.LENGTH_SHORT);
//                toast.setGravity(Gravity.CENTER_HORIZONTAL,10,10);
                toast.show();
            }
        });
    }

其实最主要还是那个setView方法,明白人其实不看这个也能猜到自定义是怎么搞的,毕竟自定义Dialog也是这么个套路,一通百通…

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!