34

昨天發佈Android M開發者預覽版。像往常一樣,引入了許多驚人的新功能。我注意到Snackbar就是其中之一。Android設計支持庫的新功能以及如何使用其Snackbar?

我已閱讀關於Snackbar的文檔,從中我瞭解到Snackbar位於Android設計支持庫的庫中,其絕對路徑爲android.support.design.widget.Snackbar

而且文件說:

小吃店提供關於操作輕便反饋。他們在移動屏幕的底部顯示 的簡短消息,在較大的設備上顯示左下角的 。 SnackBars出現在 屏幕上的所有其他元素之上,並且一次只能顯示一個。

它們在超時後或用戶互動後自動消失 屏幕上的其他位置,特別是在召喚 新表面或活動的交互之後。小吃店可以從屏幕上移除。

那麼,Snackbar的行爲如同ToastDialog? Snackbars能否在佈局文件中使用?我怎樣才能以編程方式使用它?

P.S。:

  • 上使用小吃吧的任何樣本將被理解的。
  • Android設計支持庫是一個新的支持庫,可能 有人告訴我這個庫的更多細節?
+0

你可以看到:HTTPS://github.com/MrEngineer13/SnackBar – QuestionAndroid

+0

或:HTTPS://github.com/nispok/snackbar – QuestionAndroid

+1

我的意思是'android設計支持庫'中的'Snackbar'。 'android.support.design.widget.Snackbar' – SilentKnight

回答

20

至於Snackbar

View view = snack.getView(); 
TextView tv = (TextView) view.findViewById(android.support.design.R.id.snackbar_text); 
tv.setTextColor(Color.WHITE); 

作品,它就像一個Toast但與Toast不同。 Snackbars顯示在屏幕的底部,幷包含帶有可選單一動作的文本。它們在給定的時間長度後通過動畫關閉屏幕自動超時。另外,用戶可以在超時之前將它們掃過去,這比另一個輕量級反饋機制toast強大得多。

可以通過編程方式使用它是這樣的:

Snackbar snackbar = Snackbar 
    .make(parentLayout, R.string.snackbar_text, Snackbar.LENGTH_LONG) 
    .setAction(R.string.snackbar_action, myOnClickListener); 
snackbar.setActionTextColor(Color.CYAN); 
View snackbarView = snackbar.getView(); 
snackbarView.setBackgroundColor(Color.YELLOW);//change Snackbar's background color; 
TextView textView = (TextView)snackbarView .findViewById(android.support.design.R.id.snackbar_text); 
textView.setTextColor(Color.BLUE);//change Snackbar's text color; 
snackbar.show(); // Don’t forget to show! 

注意在make()方法使用視圖 - Snackbar將試圖找到它確保它錨定在其底部。

更重要的是,Android設計支持庫用於的Android 2.1+(API 7+),其特點抽屜式導航視圖浮動編輯文本標籤,浮動操作按鈕小吃店,標籤和類似的東西。

導航視圖

導航抽屜可以在設計你的應用程序中的身份和導航和一致性的重要着力點這裏可以使你的應用程序是多麼容易瀏覽一個相當大的差異,特別是第一次使用。NavigationView通過爲導航抽屜提供所需的框架以及通過菜單資源對導航項目進行充氣的功能,使這一點變得更加簡單。

您可以使用它像這樣:

<android.support.v4.widget.DrawerLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true"> 
    <!-- your content layout --> 
    <android.support.design.widget.NavigationView 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      app:headerLayout="@layout/drawer_header" 
      app:menu="@menu/drawer"/> 
</android.support.v4.widget.DrawerLayout> 

至於抽屜菜單,則可能是:

<group android:checkableBehavior="single"> 
    <item 
     android:id="@+id/navigation_item_1" 
     android:checked="true" 
     android:icon="@drawable/ic_android" 
     android:title="@string/navigation_item_1"/> 
    <item 
     android:id="@+id/navigation_item_2" 
     android:icon="@drawable/ic_android" 
     android:title="@string/navigation_item_2"/> 
</group> 

或:

<item 
    android:id="@+id/navigation_subheader" 
    android:title="@string/navigation_subheader"> 
    <menu> 
     <item 
      android:id="@+id/navigation_sub_item_1" 
      android:icon="@drawable/ic_android" 
      android:title="@string/navigation_sub_item_1"/> 
     <item 
      android:id="@+id/navigation_sub_item_2" 
      android:icon="@drawable/ic_android" 
      android:title="@string/navigation_sub_item_2"/> 
    </menu> 
</item> 

你會得到回調通過使用setNavigationItemSelectedListener()設置OnNavigationItemSelectedListener來選擇項目。這爲您提供了單擊的MenuItem,允許您處理選擇事件,更改檢查的狀態,加載新的內容,以編程方式關閉抽屜或您可能需要的任何其他操作。

編輯文本

浮動標籤甚至毫不EditText有房在材料設計,提高。單獨輸入EditText將隱藏提示文本,現在可以將其包裝在TextInputLayout中,導致提示文本變爲浮動標籤,高於EditText,從而確保用戶永遠不會丟失上下文進入。除了顯示提示之外,您還可以通過撥打setError()EditText下方顯示錯誤消息。

浮動操作按鈕

一個浮動的操作按鈕是一個圓形按鈕,表示在界面上的主作用。設計庫的FloatingActionButton爲您提供了一個一致的實現,默認情況下,使用主題中的colorAccent進行着色。

作爲FloatingActionButton延伸ImageView中,將使用android:src或任何的方法,例如setImageDrawable()控制FloatingActionButton內示出的圖標。

標籤

頂級導航圖案通常用於組織的內容不同的分組。設計庫的TabLayout實現了兩個固定選項卡,其中視圖的寬度在所有選項卡之間平均分配,以及可滾動選項卡,其中選項卡的大小不均勻,並且可以水平滾動。

標籤可通過編程方式補充說:

TabLayout tabLayout = ...; 
tabLayout.addTab(tabLayout.newTab().setText("Tab 1")); 

如果你想在標籤之間使用ViewPager的水平分頁,您可以直接從PagerAdapter’sgetPageTitle()創建選項卡,然後將兩者結合起來使用setupWithViewPager()連接。這可確保選項卡選擇事件更新ViewPager,頁面更改將更新選定的選項卡。

CoordinatorLayout和應用欄

設計庫引入CoordinatorLayout,它提供了子視圖之間的觸摸事件控制的其他級別的佈局,一些東西,在設計庫中的許多組件乘虛而入。如果您嘗試使用AppBarLayout,則允許您的Toolbar和其他視圖(例如TabLayout提供的標籤)對用ScrollingViewBehavior標記的同級視圖中的滾動事件做出反應。因此,你可以創建一個佈局,如:現在

<android.support.design.widget.CoordinatorLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    <! -- Your Scrollable View --> 
    <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

    <android.support.design.widget.AppBarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 
    <android.support.v7.widget.Toolbar 
        ... 
        app:layout_scrollFlags="scroll|enterAlways"> 

     <android.support.design.widget.TabLayout 
        ... 
        app:layout_scrollFlags="scroll|enterAlways"> 
    </android.support.design.widget.AppBarLayout> 
</android.support.design.widget.CoordinatorLayout> 

,隨着用戶滾動RecyclerView,該AppBarLayout可以通過使用兒童的滾動標誌的事件作出響應,以控制他們進入(在屏幕上滾動)和出口(滾動屏幕)。

設計庫,AppCompat以及所有Android支持庫都是提供構建現代,美觀的Android應用所需的構建塊的重要工具,無需從頭開始構建所有內容。

+0

真的很有幫助!我一直在努力改變Snackbar的文字顏色很長一段時間! – wwang

+0

不錯,真的很有幫助 –

54

Snackbar不需要Android-M

它是在新的設計支持庫裏,你今天就可以使用它。

只需更新的SDK添加在你的代碼這種依賴關係:

compile 'com.android.support:design:22.2.0' 

您可以使用這樣的代碼:

Snackbar.make(view, "Here's a Snackbar", Snackbar.LENGTH_LONG) 
     .setAction("Action", null) 
     .show(); 

它就像一個麪包。

enter image description here

指定動作你必須設置OnClickListener

Snackbar.make(view, "Here's a Snackbar", Snackbar.LENGTH_LONG) 
     .setAction("Action", myOnClickListener) 
     .show(); 

如果您想改變背景顏色,您可以使用這樣的事情:

Snackbar snackbar = Snackbar.make(view, "Here's a Snackbar",  
        Snackbar.LENGTH_LONG); 
View snackBarView = snackbar.getView(); 
snackBarView.setBackgroundColor(colorId); 
snackbar.show(); 

enter image description here

如果你想有一些內置的功能,作爲滑動解除手勢,或FAB滾動了小吃店,只是有一個CoordinatorLayout在您的視圖層次結構中。

+0

所以,'Snackbar'可以只顯示在'view'的底部,'view'的頂部或左邊怎麼樣?我怎樣才能設置'文本'的引力,如CENTER或RIGHT? – SilentKnight

+0

它實現了材質設計,然後在移動屏幕的底部顯示一條消息。 –

+2

然而,它要求主機活動是AppCompat。 – McP

36

Activity你可以使用:

String s = "SnackBar" 
Snackbar.make(findViewById(android.R.id.content), s, Snackbar.LENGTH_LONG).show(); 

Fragment

Snackbar.make(getView(), s, Snackbar.LENGTH_LONG).show(); 

編輯:

爲了改變背景顏色我用的是這樣的:

String s = "SnackBar" 
Snackbar snack = Snackbar.make(getView(), s, Snackbar.LENGTH_LONG); 
View view = snack.getView(); 
view.setBackgroundColor(Color.YELLOW); 
snack.show(); 

和更改文本顏色(儘管主題):就像一個魅力;-)

+0

我怎樣才能設置背景顏色或「Snackbar」的可繪製? – SilentKnight

+0

查看我編輯的答案 –

+3

只需使用'setActionTextColor()'on _snack_ – Till

-1

這是非常簡單的,以使機器人的小吃店10秒

Snackbar.make(view, "Hello SnackBar", Snackbar.LENGTH_LONG) 
        .setAction("Its Roy", new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 

         } 
        }) 
        .setDuration(10000) 
        .setActionTextColor(getResources().getColor(R.color.colorAccent)) 
      .show(); 
0

我設置codeding

Snackbar snackbar = Snackbar 
     .make(getView(), text, Snackbar.LENGTH_INDEFINITE); 

View sbView = Global.alert.getView(); 
sbView.setBackgroundColor(0xFF000000); 

TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text); 
textView.setTextColor(Color.WHITE); 
textView.setTextSize(30); 

Global.alert.show(); 
0

小吃吧能也顯示圖標。

例如:對於沒有網絡,你可以顯示這樣的小吃吧(就像Gmail一樣)。

SpannableStringBuilder builder = new SpannableStringBuilder(); 
    builder.append(" ").setSpan(new ImageSpan(this, R.drawable.snackbar_icon), 0, 1, 0); 
    builder.append(" No Network Available"); 
    Snackbar snackBar = Snackbar.make(findViewById(R.id.co_ordinate), builder, Snackbar.LENGTH_LONG); 
    snackBar.setAction("RETRY", new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { //Retry Code here 

     } 
    }); 
    snackBar.show(); 
0

你也可以改變文字顏色和快餐酒吧的背景

Snackbar snackbar = Snackbar.make(view, "Text", 
          Snackbar.LENGTH_LONG); 
        View snackBarView = snackbar.getView(); 
        TextView tv = (TextView) snackBarView.findViewById(android.support.design.R.id.snackbar_text); 
        tv.setTextColor(ContextCompat.getColor(MainActivity.this, R.color.colorAccent)); 
        snackBarView.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.colorPrimaryDark)); 
        snackbar.show(); 
相關問題