• Android 彩色Toast实现


    Android默认的Toast太丑了,我们来封装一个花里胡哨的Toast吧,就叫ColoredToast。

    Github:https://github.com/imcloudfloating/DesignApp

    效果:

    Toast有一个setView方法,通过它我们可以设置自定义的布局,这里我只是加入了改变背景色,如果你有其它需求,比如加上图标也是可以的。

    布局文件:一个FrameLayout和显示消息的TextView

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     xmlns:tools="http://schemas.android.com/tools"
     4     android:layout_width="wrap_content"
     5     android:layout_height="wrap_content">
     6 
     7     <TextView
     8         android:id="@+id/toast_message"
     9         android:layout_width="wrap_content"
    10         android:layout_height="48dp"
    11         android:paddingStart="32dp"
    12         android:paddingEnd="32dp"
    13         android:gravity="center"
    14         android:textSize="18sp"
    15         tools:text="This is a toast message" />
    16 
    17 </FrameLayout>

    2.Java代码:

    用LayoutInflater来加载布局,然后用setView将布局设置为Toast的根View,通过自定义方法来设置Toast的消息和背景色,这里背景色是给TextView设置的,假如你想加上图标和其它元素,通过findViewById来设置即可。

    这里我用的是GradientDrawable来作为Toast的背景,setColor方法背景色,setCornerRadius设置圆角半径,最后将他作为TextView的背景就可以了。如果你不想用它,也可以直接使用xml文件来作为背景,不过这样就不方便灵活设置颜色了。

     1 package com.cloud.customviews;
     2 
     3 import android.content.Context;
     4 import android.graphics.drawable.GradientDrawable;
     5 import android.support.annotation.ColorRes;
     6 import android.support.annotation.IntDef;
     7 import android.support.annotation.NonNull;
     8 import android.support.annotation.StringRes;
     9 import android.view.LayoutInflater;
    10 import android.view.View;
    11 import android.widget.TextView;
    12 import android.widget.Toast;
    13 
    14 public class ColoredToast extends Toast {
    15 
    16     @IntDef(value = {
    17             LENGTH_SHORT,
    18             LENGTH_LONG
    19     })
    20     @interface Duration {}
    21 
    22     private ColoredToast(Context context) {
    23         super(context);
    24     }
    25 
    26     public static class Maker {
    27 
    28         private Context mContext;
    29         private ColoredToast mToast;
    30         private View mToastView;
    31         private TextView mTextMessage;
    32 
    33         public Maker(Context context) {
    34             mContext = context;
    35             mToast = new ColoredToast(context);
    36             mToastView = LayoutInflater.from(context).inflate(R.layout.toast_colored, null);
    37             mTextMessage = mToastView.findViewById(R.id.toast_message);
    38         }
    39 
    40         /**
    41          * Set text color and background color for toast by resource id
    42          */
    43         public Maker setColor(@ColorRes int textColor, @ColorRes int backgroundColor) {
    44             GradientDrawable drawable = new GradientDrawable();
    45             drawable.setColor(mContext.getColor(backgroundColor));
    46             drawable.setCornerRadius(mTextMessage.getLayoutParams().height / 2);
    47             mToastView.setBackground(drawable);
    48             mTextMessage.setTextColor(mContext.getColor(textColor));
    49             return this;
    50         }
    51 
    52         /**
    53          * Set position
    54          * @see android.view.Gravity
    55          */
    56         public Maker setGravity(int gravity, int xOffset, int yOffset) {
    57             mToast.setGravity(gravity, xOffset, yOffset);
    58             return this;
    59         }
    60 
    61         public ColoredToast makeToast(@StringRes int resId, @Duration int duration) {
    62             mTextMessage.setText(resId);
    63             mToast.setView(mToastView);
    64             mToast.setDuration(duration);
    65             return mToast;
    66         }
    67 
    68         public ColoredToast makeToast(@NonNull String text, @Duration int duration) {
    69             mTextMessage.setText(text);
    70             mToast.setView(mToastView);
    71             mToast.setDuration(duration);
    72             return mToast;
    73         }
    74     }
    75 }

    花里胡哨的Toast打造完成!

  • 相关阅读:
    咖啡豆(JavaBean)•香
    SOC FPGA篇之 如何使用VNC 扩展桌面
    C指针地址运算
    nasm 指令学习
    CPL DPL RPL 及特权间的跳转
    ubuntu终端命令
    自动动手写操作系统 中 _disp_int 堆栈保护错误
    makefile 详解1
    [ 转载] Linux/Unix环境下的make和makefile详解2
    汇编指令: LGDT、LIDT、LLDT、LMSW、LOADALL、LOADALL286、LOCK、LODSB、LODSW、LODSD
  • 原文地址:https://www.cnblogs.com/cloudfloating/p/9845482.html
Copyright © 2020-2023  润新知