Snackbar
快餐店
與Toast的區(qū)別:
- 比toast更加好桐绒,Snackbar 可以響應(yīng)點(diǎn)擊事件
- Snackbar 同一時(shí)間有且只有一個(gè)在顯示逝钥。
- Snackbar 上不要有圖標(biāo)
- Snackbar上 Action 只能有一個(gè)覆致。
- 如果有懸浮按鈕 floating action button的話衙吩,snackbar 在彈出的時(shí)候 不要覆蓋這個(gè)Button.
- 此外我個(gè)人認(rèn)為 Snackbar 在一定程度上可以替代dialog的某些應(yīng)用場(chǎng)景所森。比如以前網(wǎng)絡(luò)不通的情況下 我們登陸失敗位衩,會(huì)給一個(gè)dialog提示裆蒸,現(xiàn)在就可以用snackbar 來(lái)做這個(gè)有action的提示 更加方便快捷。
Snackbar的簡(jiǎn)單使用:
一糖驴、導(dǎo)入support design 庫(kù)
在app的build gradle文件加入compile 'com.android.support:design:22.2.0'
二僚祷、snackbar 需要有一個(gè)父控件所以 我們可以隨便找一個(gè)View(textview,button)用來(lái)做他的父控件。
我們知道一個(gè)布局的最最最最外層有一個(gè)DecorView,而這個(gè)view就是我們通用的view.
在activity中我們這樣獲取DecorView:getwindow().getDecorView();就得到了這個(gè)最外層的view.
三贮缕、簡(jiǎn)單使用
與Toast的用法幾乎一毛一樣
Snackbar.make(view,"呵呵噠",Snackbar.LENGTH_INDEFINITE).show();
四辙谜、實(shí)現(xiàn)更多功能
- 設(shè)置點(diǎn)擊事件
Snackbar.make(view,"呵呵噠",Snackbar.LENGTH_INDEFINITE)
.setAction("fuck you!", new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "once again fuck you", Toast.LENGTH_SHORT).show();
}
}).show();
- 設(shè)置點(diǎn)擊事件字體顏色
Snackbar.make(view, "呵呵噠", Snackbar.LENGTH_INDEFINITE)
.setActionTextColor(Color.YELLOW) //設(shè)置點(diǎn)擊事件字體顏色
.setAction("fuck you!", new View.OnClickListener() { //設(shè)置事件
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "once again fuck you", Toast.LENGTH_SHORT).show();
}
}).show();
- 設(shè)置回調(diào)方法
Snackbar.make(view,"呵呵噠",Snackbar.LENGTH_SHORT).setCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar snackbar, int event) { //銷毀時(shí)
super.onDismissed(snackbar, event);
Toast.makeText(MainActivity.this,"dismissed",Toast.LENGTH_SHORT).show();
}
@Override
public void onShown(Snackbar snackbar) { //顯示時(shí)
super.onShown(snackbar);
Toast.makeText(MainActivity.this,"shown",Toast.LENGTH_SHORT).show();
}
}).show();
- 設(shè)置背景顏色
TextView tv = (TextView) findViewById(R.id.textView);
Snackbar sb = Snackbar.make(tv,"改變背景",Snackbar.LENGTH_SHORT);
View view2 = sb.getView();
view2.setBackgroundColor(Color.RED); //設(shè)置背景顏色
sb.show();
- 設(shè)置顯示位置
Snackbar mSnackbar = Snackbar.make(findViewById(R.id.tv), "it is Snackbar", Snackbar.LENGTH_SHORT);
View v = mSnackbar.getView();
ViewGroup.LayoutParams vl = v.getLayoutParams();
CoordinatorLayout.LayoutParams cl = new CoordinatorLayout.LayoutParams(vl.width,vl.height);
//設(shè)置字體為紅色
((TextView) v.findViewById(R.id.snackbar_text)).setTextColor(Color.RED);
//設(shè)置顯示位置居中
cl.gravity = Gravity.CENTER;
v.setLayoutParams(cl);
//設(shè)置背景色為綠色
v.setBackgroundColor(Color.GREEN);
//自定義動(dòng)畫
//v.setAnimation();
//設(shè)置icon
ImageView iconImage=new ImageView(MainActivity.this);
iconImage.setImageResource(R.mipmap.ic_launcher);
//icon插入布局
Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) v;
snackbarLayout.addView(iconImage,0);
//設(shè)置按鈕為藍(lán)色
mSnackbar.setActionTextColor(Color.BLUE).setAction("點(diǎn)我", new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}).show();
樣圖:
c79f3802-ca31-439e-9051-8c1d4a865d23.png