Material Design學習-----SnackBar

  SnackBar是一個和Toast相似的空間,用於彈出提示做用,可是相比於Toast而已,SnackBar會有一個不錯的動畫效果,同時當手指完成屏幕中其餘操做的時候,SnackBar會當即消失。同時能夠爲SnackBar設置一個按鈕點擊事件,效果以下圖所示(圖片引用:http://www.tuicool.com/articles/BfEbMvB)android

  而同時SnackBar使用方式也與Toast相似:ide

 1 public class SnackBarDemo extends Activity{
 2     private CoordinatorLayout layout;
 3     private Button btn;
 4     private LinearLayout layout_m;
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.snackbar);
 9         layout= (CoordinatorLayout) findViewById(R.id.layout);
10         layout_m= (LinearLayout) findViewById(R.id.layout_m);
11         btn= (Button) findViewById(R.id.btn);
12         btn.setOnClickListener(new View.OnClickListener() {
13             @Override
14             public void onClick(View v) {
15                 Snackbar.make(layout_m,"哈哈哈",Snackbar.LENGTH_SHORT).setAction("action", new View.OnClickListener() {
16                     @Override
17                     public void onClick(View v) {
18 
19                     }
20                 }).show();
21             }
22         });
23     }
24 }

  以上代碼就能夠完成Snackbar的顯示,同時setAction函數就是爲了給Snackbar設置按鈕和點擊事件,這個是可選內容。函數

  同時另外一個方面就是如何修改Snackbar顏色的問題,下面是Snackbar類庫中有關的佈局文件:佈局

 1 <merge xmlns:android="http://schemas.android.com/apk/res/android">
 2  
 3     <TextView
 4             android:id="@+id/snackbar_text"
 5             android:layout_width="wrap_content"
 6             android:layout_height="wrap_content"
 7             android:layout_weight="1"
 8             android:paddingTop="@dimen/snackbar_padding_vertical"
 9             android:paddingBottom="@dimen/snackbar_padding_vertical"
10             android:paddingLeft="@dimen/snackbar_padding_horizontal"
11             android:paddingRight="@dimen/snackbar_padding_horizontal"
12             android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"
13             android:maxLines="@integer/snackbar_text_max_lines"
14             android:layout_gravity="center_vertical|left|start"
15             android:ellipsize="end"/>
16  
17     <TextView
18             android:id="@+id/snackbar_action"
19             android:layout_width="wrap_content"
20             android:layout_height="wrap_content"
21             android:layout_marginLeft="@dimen/snackbar_extra_spacing_horizontal"
22             android:layout_marginStart="@dimen/snackbar_extra_spacing_horizontal"
23             android:layout_gravity="center_vertical|right|end"
24             android:background="?attr/selectableItemBackground"
25             android:paddingTop="@dimen/snackbar_padding_vertical"
26             android:paddingBottom="@dimen/snackbar_padding_vertical"
27             android:paddingLeft="@dimen/snackbar_padding_horizontal"
28             android:paddingRight="@dimen/snackbar_padding_horizontal"
29             android:visibility="gone"
30             android:textAppearance="@style/TextAppearance.Design.Snackbar.Action"/>
31  
32 </merge>

  能夠發現,其實Snackbar就是兩個TextView,可是因爲代碼的封裝性,咱們沒有辦法直接修改其中的樣式,這個時候咱們能夠使用getView()來取得相應的控件並修改其樣式:動畫

1 public static void setSnackbarMessageTextColor(Snackbar snackbar, int color) {
2         View view = snackbar.getView();
3         ((TextView) view.findViewById(R.id.snackbar_text)).setTextColor(color);
4     }

  在實例化Snackbar的時候調用改函數就能夠了:ui

 1 Snackbar snackbar =
 2                 Snackbar.make(container, "SnackbarTest", Snackbar.LENGTH_LONG).setAction("Action", new View.OnClickListener() {
 3                     @Override
 4                     public void onClick(View v) {
 5                         Snackbar snackbar =
 6                                 Snackbar.make(container, "ActionClick", Snackbar.LENGTH_LONG);
 7                         setSnackbarMessageTextColor(snackbar,Color.parseColor("#FF0000"));
 8                         snackbar.show();
 9                     }
10                 });
11         setSnackbarMessageTextColor(snackbar, Color.parseColor("#FFFFFF"));
12         snackbar.show();
相關文章
相關標籤/搜索