一涯冠、簡介
Snackbar 是 Android 5.0 之后新出的一個控件身坐,屬于 com.android.support:design 包下
Snackbar 并不是 Toast 的替代品禽作,兩者各有不同的應用場景碉熄,只不過是 Snackbar 對 Toast 進行了擴展暇番,允許在提示當中加入一個可交互按鈕
二崩哩、簡單使用
2.1 要先在 app 的 build.gradle 中添加依賴
//個人認為與 V7 包的版本一致最好
compile 'com.android.support:design:25.3.1'
2.2 簡單操作如下
Snackbar.make(view,"我是Snackbar",Snackbar.LENGTH_LONG).show();
第一個參數(shù)是 view 噩翠,只要傳入當前界面布局的任意一個 view 都可以戏自,它會根據這個 view 來查找最外層的布局,用于確定 Snackbar 的位置伤锚,但是如果在找的過程中擅笔,找到 CoordinatorLayout ,那就會認為 CoordinatorLayout 為最外層布局
第二個參數(shù)是 String 屯援,即:提示的信息
第三個參數(shù)是 顯示多長時間的意思猛们,有三個可選參數(shù)
Snackbar.LENGTH_SHORT //事件短,大概 1.8 秒左右
Snackbar.LENGTH_LONG // 時間長玄呛,大概 3 秒左右
Snackbar.LENGTH_INDEFINITE // 永久顯示阅懦,需手動取消
- 顯示效果如下:
注意:我這里的最外層布局為 LinearLayout ,如果換成 CoordinatorLayout 就不會覆蓋掉了
2.3 添加可交互按鈕
Snackbar.make(view,"我是Snackbar",Snackbar.LENGTH_LONG)
.setAction("按鈕", new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}).show();
通過 setAction 添加按鈕徘铝,默認只要點擊 Snackbar 就消失
第一個參數(shù):按鈕顯示的文字
第二個參數(shù):點擊監(jiān)聽
-
顯示效果如下:
三耳胎、主要注意的幾點:
只有最外層的布局為 CoordinatorLayout 惯吕,Snackbar 才不會覆蓋掉 FloatingActionButton 。
只有 Snackbar 配合 CoordinatorLayout 使用怕午,才會有側滑刪除的動畫效果废登,否則是沒有的。
Google 設計規(guī)范要求1郁惜,Snackbar 只以純文本的形式來顯示
Google 設計規(guī)范要求2堡距,同一個屏幕中最多只能同時出現(xiàn)一個 Snackbar兆蕉。
四、玩轉 Snackbar
4.1 修改 Snackbar 右側可點擊按鈕的顏色
snackbar = Snackbar.make(view,"我是Snackbar",Snackbar.LENGTH_LONG)
.setAction("按鈕", new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
snackbar.show();
// 修改 Snackbar 右側可點擊按鈕的顏色
snackbar.setActionTextColor(Color.WHITE);
- 運行效果如下
4.2 修改背景色 和 Snackbar 左側文字顯示顏色
- Snackbar 源碼中的布局文件為:
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/snackbar_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="14dp"
android:paddingBottom="14dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"
android:maxLines="2"
android:layout_gravity="center_vertical|left|start"
android:ellipsize="end"
android:textAlignment="viewStart"/>
<Button
android:id="@+id/snackbar_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="0dp"
android:layout_marginStart="0dp"
android:layout_gravity="center_vertical|right|end"
android:paddingTop="14dp"
android:paddingBottom="14dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:visibility="gone"
android:textColor="?attr/colorAccent"
style="?attr/borderlessButtonStyle"/>
</merge>
- snackbar_text 是 Snackbar 左側顯示文字的 id 易稠,找到這個 id 并設置顏色就 OK 了,如下所示
snackbar = Snackbar.make(view,"我是Snackbar",Snackbar.LENGTH_INDEFINITE)
.setAction("按鈕", new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
snackbar.show();
snackbar.setActionTextColor(Color.WHITE);
setSnackbarColor();
//通過 getView() 方法獲取 Snackbar 的父布局
View view = snackbar.getView();
if (view != null) {
//設置背景色
view.setBackgroundColor(getResources().getColor(R.color.colorAccent));
//獲取 Snackbar 左側提示信息的控件驶社,修改字體顏色
((TextView) view.findViewById(R.id.snackbar_text)).setTextColor(Color.WHITE);
}
-
顯示效果如下:
4.3 在 Snackbar 中添加圖標
- 實際上,添加圖標亡电,并不符合 Google 的設計規(guī)范和初衷,不建議添加圖片這里只附上一篇添加圖片的鏈接:http://www.reibang.com/p/cd1e80e64311