在與用戶的交互中,最爲常用的Toast和Dialog,但二者都存在其侷限,Toast無法與用戶進行交互,Dialog雖然可以與用戶交互,但卻會阻斷用戶操作的連貫性,介於二者之間的平衡,Snackbar孕育而生
自定義Toast
首先我們來做一個自定義的Toast
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void showToast(View v) {
//Toast.makeText(this,"toast show",Toast.LENGTH_SHORT).show();
Toast result = new Toast(this);
LayoutInflater inflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflate.inflate(R.layout.toast_layout, null);
result.setView(view);
result.setDuration(Toast.LENGTH_SHORT);
result.show();
}
}
toast_layout.xml
就是一個簡單的圖片加文字的佈局
<?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="match_parent"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher_round" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center"
android:text="自定義Toast" />
</LinearLayout>
Snackbar使用
public void showSnackbar(View view) {
//Snackbar.LENGTH_SHORT:短時間
//Snackbar.LENGTH_LONG:長時間
//Snackbar.LENGTH_INDEFINITE:不消失
Snackbar snackbar = Snackbar.make(view,"是否關閉WIFI",Snackbar.LENGTH_INDEFINITE);
//只能設置單個action
snackbar.setAction("確定", new View.OnClickListener() {
@Override
public void onClick(View v) {
showToast(v);
}
});
snackbar.show();
}
Snackbar的使用其實很簡單,設置顯示內容,設置action,然後監聽就完事了
其主要優勢在於不會打斷用戶操作,保證用戶的使用體驗
項目效果如下: