34

昨天发布了面向开发者的 Android M 预览版。像往常一样,引入了许多惊人的新功能。我注意到这Snackbar是其中之一。

我看过关于 的文档Snackbar,从中得知 Snackbar 在 Android Design Support Library 的库中,其绝对路径为android.support.design.widget.Snackbar.

文件说:

Snackbars 提供有关操作的轻量级反馈。它们在移动设备的屏幕底部和较大设备的左下方显示一条简短消息。Snackbars 出现在屏幕上所有其他元素的上方,一次只能显示一个。

它们会在超时或屏幕上其他地方的用户交互后自动消失,尤其是在召唤新表面或活动的交互后。小吃店可以从屏幕上滑出。

那么,Snackbar行为是否像 aToast或 a Dialog?可以在布局文件中使用 Snackbars 吗?我如何以编程方式使用它?

PS:

  • 任何有关使用 Snackbar 的示例将不胜感激。
  • Android Design Support Library 是一个新的支持库,有人可以告诉我这个库的更多细节吗?
4

8 回答 8

54

新的不需要 Android-MSnackbar

它位于新的设计支持库中,您现在就可以使用它。

只需更新您的 SDK,在您的代码中添加此依赖项:

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

您可以使用这样的代码:

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

这就像吐司。

在此处输入图像描述

分配一个动作,你必须设置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();

在此处输入图像描述

如果您想拥有一些内置功能,例如滑动关闭手势,或FAB向上滚动小吃栏,只需CoordinatorLayout在您的视图层次结构中添加一个。

于 2015-05-29T06:45:58.490 回答
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();

并用于更改文本颜色(尽管有主题):

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

奇迹般有效 ;-)

于 2015-05-29T07:15:53.167 回答
20

至于Snackbar,它的作用类似于 aToast但与 a 不同ToastSnackbars显示在屏幕底部,包含带有可选单个操作的文本。它们会在给定的时间长度后通过屏幕上的动画自动超时。此外,用户可以在超时之前将它们刷掉,这比 toasts 强大得多,这是另一种轻量级的反馈机制。

您可以像这样以编程方式使用它:

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!

注意 View 在方法中的使用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人在材料设计上也有改进的空间。虽然 aEditText会在输入第一个字符后隐藏提示文本,但您现在可以将其包裹在 a 中TextInputLayout,使提示文本成为上方的浮动标签EditText,确保用户在输入内容时永远不会丢失上下文。除了显示提示外,您还可以EditText通过调用在下方显示错误消息setError()

浮动操作按钮

浮动操作按钮是一个圆形按钮,表示界面上的主要操作。设计库FloatingActionButton为您提供了一个一致的实现,默认情况下使用colorAccent来自您的主题的颜色。

作为FloatingActionButton扩展ImageView,您将使用android:src或任何方法setImageDrawable()来控制在FloatingActionButton.

标签

顶级导航模式通常用于组织不同的内容分组。设计库TabLayout实现了两个固定选项卡,其中视图的宽度在所有选项卡之间平均分配,以及可滚动选项卡,其中选项卡不是统一的大小并且可以水平滚动。

可以以编程方式添加选项卡:

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

如果要ViewPager在选项卡之间进行水平分页,可以直接从您的选项卡创建选项卡PagerAdapter’s getPageTitle(),然后使用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>

现在,当用户滚动 时RecyclerViewAppBarLayout可以通过使用孩子的滚动标志来响应这些事件,以控制他们如何进入(在屏幕上滚动)和退出(在屏幕上滚动)。

设计库、AppCompat 和所有 Android 支持库都是重要的工具,它们提供了构建现代、美观的 Android 应用程序所需的构建块,而无需从头开始构建所有内容。

于 2015-05-31T03:32:22.257 回答
0

你看过http://android-developers.blogspot.in/2015/05/android-design-support-library.html吗?

它总结了整个支持库。

于 2016-07-08T13:31:31.323 回答
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();
于 2016-07-22T08:36:41.100 回答
0

Snackbar 也能够显示图标。

例如:对于没有网络的情况,您可以像这样显示快餐栏(就像 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();
于 2016-04-13T14:34:25.737 回答
0

我设置编码

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();
于 2015-11-26T05:36:30.717 回答
-1

10秒在android中做一个snackbar很简单

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();
于 2015-10-16T13:28:19.397 回答