UI妹子总是有各种炫酷的创意想法。如果UI妹子拿着一个UI效果问你。
妹子:“这个效果能不能实现?”
你:“这个实现不了”。
那岂不是很尴尬?最可怕的是
妹子:“这个效果能不能实现?”
你:“这个实现不了”。
妹子:“那iOS那边怎么能实现?”你:“......”
所以,作为男人,该硬的时候就要硬起来。炫酷的效果没有什么是不能实现的。
要做到你有一天听到妹子质问iOS。
妹子:“那安卓那边怎么能实现?”
iOS:“......"
好 ,言归正传。我们今天来看一下如何简单实现炫酷的Toast效果。
Toast大家都经常用,非常的简单。但是不知道大家发现一个小问题没有,安卓自带的Toast有一点点小缺陷。
第一、假设我们点击一个按钮就弹出一个吐司,当我们重复点击按钮调用Toast的时候,Toast会重复创建,所以要过好久Toast才会消失。
第二、由于国内安卓环境的特殊性,几乎每一个厂商都有他自己的Toast样式。显示在下方的,显示在中间的都有,各种长相也是千奇百怪。
当然,如果你不是一个完美主义者,那就忍了。但是,对于像我这样的完美主义者,这怎么能忍?那我们今天就来着手解决这个问题。
说一千道一万不如上代码来得直接。走你。
首先,我们需要在drawable文件夹下创建一下我们吐司的外观长相,怎么创建呢?当然是用shape啦。
1、在drawable文件夹下创建shape_toast.xml文件
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/colorPrimary" />
<corners android:radius="5dp" />
</shape>
接下来我们就需要引用我们刚创建的外观长相
2、在layout文件夹下创建 layout_toast.xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView_toast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:padding="5dp"
android:background="@drawable/selector_login_button"
android:textColor="@color/colorWhite" />
</LinearLayout>
接下来我们在java代码中引用我们的布局文件
3、在java文件夹下创建GorgeousToast.java文件,同样的,直接上代码。
public class GorgeousToast {
private Toast toast;
private Context context;
private String message;
public GorgeousToast(Context context) {
this.context = context;
}
public GorgeousToast(Context context, String message){
this.context = context;
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public void show(){
if(toast == null){
toast = new Toast(context);
}
toast.setDuration(Toast.LENGTH_SHORT);
toast.setGravity(Gravity.BOTTOM|Gravity.CENTER, 0, DisplayUtils.dp2px(context,60));
LayoutInflater inflater = LayoutInflater.from(context);
LinearLayout toastLayout = (LinearLayout)inflater.inflate(R.layout.layout_toast, null);
TextView textToast = (TextView)toastLayout.findViewById(R.id.textView_toast);
textToast.setText(message);
toast.setView(toastLayout);
toast.show();
}
}
这里也非常的简单,我们还是照顾一下新手同学,解释一下。
我们创建一个了GorgeousToast.java文件,写了一下他的构造方法。一种是通过传上下文对象然后通过setMessage()方法设置消息内容,一种直接在构造方法里面设置消息内容。然后我们的show()方法主要就是展示Toast啦。首先设置Duration也就是时长为短时长,然后设置位置为底部居中并且距离底部60dp的位置。然后引用我们刚创建好的Toast布局文件,最后将Toast显示出来。
到这里基本的效果就实现了。
上面有个DisplayUtils.java,我也给大家发出来。
DisplayUtils.java
public class DisplayUtils {
public static int dp2px(Context context, float dpValue) {
float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
}
上面我为什么说基本实现了呢?确实Toast的样式问题是解决了,但是TM的好像还是有重复创建的问题啊。
冷静、冷静。
我们在java文件中继续创建一个ToastUtils.java
public class ToastUtils {
public static GorgeousToast gorgeousToast;
public static void showToast(Context context,String content){
if(gorgeousToast==null){
gorgeousToast = new GorgeousToast(context);
}
gorgeousToast.setMessage(content);
gorgeousToast.show();
}
}
今天简单实现不一样炫酷Toast的文章就到这里,拜了个拜!