前言
最近在ReView之前項(xiàng)目的代碼醉箕,發(fā)現(xiàn)之前有個(gè)項(xiàng)目中的提示方式運(yùn)用的是新浪微博中的設(shè)計(jì)爬虱。設(shè)計(jì)雖好瞻离,但是這會(huì)覺得當(dāng)初的這個(gè)實(shí)現(xiàn)方式有些問題。先來看看微博上的效果:
這條黃色的提示欄是不是很熟悉(如果你像我一樣經(jīng)常刷微博)临谱?個(gè)人感覺這種提示方式還是很簡潔很優(yōu)雅的璃俗。
有點(diǎn)跑偏了,趕緊回來悉默。城豁。。
當(dāng)初的實(shí)現(xiàn)方式是自定義一個(gè)View抄课,也就是這個(gè)提示欄唱星,設(shè)置下透明度雳旅,然后一直寫死在xml布局中,位置上處于Titlebar下方间聊,visibility默認(rèn)為gone岭辣。然后每次要顯示的時(shí)候修改下visibility,并且添加一個(gè)動(dòng)畫效果甸饱。肉眼看來確實(shí)跟微博上的沒有絲毫的差別,可是之后的經(jīng)歷就讓當(dāng)初還在實(shí)習(xí)的我痛不欲生了仑濒。
比如:在一次顯示周期中還未結(jié)束叹话,另一個(gè)提示來了,這會(huì)該如何切換墩瞳?多個(gè)提示同時(shí)向你涌來驼壶,該如何顯示?喉酌。热凹。。
這里不去討論這些問題的解決方案泪电,其實(shí)后來也就是添加了一個(gè)消息隊(duì)列般妙,勉強(qiáng)解決了一些問題。
正題
今天我將利用一種簡單的方式實(shí)現(xiàn)這一效果相速,僅僅只是利用Toast碟渺,并且我覺得新浪微博也是用的Toast。直接上代碼:
public static void showOnTop(Context context, String tip) {
LayoutInflater inflater = LayoutInflater.from(context);
View layout = inflater.inflate(R.layout.toast_layout, null);
TextView text = (TextView) layout.findViewById(R.id.tv_content);
text.setText(tip);
Toast toast = new Toast(context);
// 設(shè)置Toast顯示位置為橫向全屏突诬,顯示在頂部苫拍,并且y軸的偏移量為正的45dp,也就是toolbar的高度
toast.setGravity(Gravity.FILL_HORIZONTAL | Gravity.TOP, 0, DensityUtil.dip2px(context, 45));
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(layout); // 設(shè)置Toast的自定義布局
toast.show();
}
實(shí)現(xiàn)的代碼很簡單旺隙,僅僅只是通過自定義Toast布局绒极,然后設(shè)置Toast的顯示位置就Ok了。
再看下布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/app_Accent_p"
android:gravity="center"
android:orientation="vertical"
android:padding="10dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:src="@drawable/tip_toast_phone"
android:visibility="gone" />
<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="16sp" />
</LinearLayout>
調(diào)用代碼:
ToastUtil.showOnTop(mApp, "XXXX");
有一點(diǎn)需要注意下:如果在xml中為LinearLayout
設(shè)置android:layout_width="match_parent"
蔬捷,Toast是不會(huì)在橫軸上全屏顯示的垄提,只有設(shè)置通過Java代碼設(shè)置gravity為Gravity.FILL_HORIZONTAL
,才會(huì)全屏抠刺。也就是說Toast是否能夠全屏顯示跟xml代碼無關(guān)塔淤,僅僅跟gravity有關(guān)。
我們實(shí)現(xiàn)的效果如下:
沒有給它設(shè)置透明度速妖,所以效果上有一點(diǎn)點(diǎn)的差異高蜂,其他沒啥差別。由于是Toast罕容,之前遇到的問題也就不存在了备恤,即使存在也可以很簡單得解決稿饰。