Android设计支持库有哪些新功能以及如何使用其Snackbar?

Sil*_*ght 34 android android-support-library material-design android-design-library android-snackbar

面向开发人员的Android M Preview昨天发布.像往常一样,引入了许多令人惊叹的新功能.我注意到这Snackbar是其中之一.

我已经阅读了文档Snackbar,从中我了解到Snackbar位于Android设计支持库的库中,其绝对路径是android.support.design.widget.Snackbar.

该文件说:

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

它们会在超时后或屏幕上其他位置的用户交互后自动消失,尤其是在召唤新表面或活动的交互之后.Snackbars可以在屏幕上刷掉.

那么,Snackbar表现得像一个Toast或一个Dialog?可以在布局文件中使用Snackbars吗?我怎么能以编程方式使用它?

PS:

  • 任何使用Snackbar的样品都将受到赞赏.
  • Android设计支持库是一个新的支持库,有人可以向我展示这个库的更多细节吗?

Gab*_*tti 54

新版不需要Android-M.Snackbar

它位于新的设计支持库中,您可以立即使用它.

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

compile 'com.android.support:design:22.2.0'
Run Code Online (Sandbox Code Playgroud)

你可以使用这样的代码:

Snackbar.make(view, "Here's a Snackbar", Snackbar.LENGTH_LONG)
        .setAction("Action", null)
        .show();
Run Code Online (Sandbox Code Playgroud)

它就像一个吐司.

在此输入图像描述

分配动作,您必须设置OnClickListener.

Snackbar.make(view, "Here's a Snackbar", Snackbar.LENGTH_LONG)
        .setAction("Action", myOnClickListener)
        .show();
Run Code Online (Sandbox Code Playgroud)

如果您想更改背景颜色,可以使用以下内容:

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

在此输入图像描述

如果您想要一些内置功能作为滑动到解除手势,或者FAB向上滚动快餐栏,只需CoordinatorLayout在视图层次结构中使用.

  • 但是,它确实需要主机活动是AppCompat. (2认同)
  • @JonnyWright如果您想要一个滑动到解除手势,请在布局中使用CoordinatorLayout. (2认同)
  • @GabrieleMariotti有什么方法可以让我们无限期地展示SnackBar吗?我的意思是,只有当用户点击小吃店的操作按钮时才会解雇?我想我应该增加时间但是我把一些整数替换为"Snackbar.LENGTH_LONG"它显示只有`Snackbar.LENGTH_LONG`或`Snackbar.LENGTH_SHORT` (2认同)
  • @ShajeelAfzal目前有一个bug.您应该能够在下一个版本中设置自定义持续时间. (2认同)

Mat*_*ski 36

Activity你可以使用:

String s = "SnackBar"
Snackbar.make(findViewById(android.R.id.content), s, Snackbar.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)

并在Fragment:

Snackbar.make(getView(), s, Snackbar.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)

编辑:

为了改变背景颜色,我使用这样的东西:

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

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

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

奇迹般有效 ;-)

  • 要更改文本颜色,只需在_snack_上使用`setActionTextColor()` (3认同)
  • 遗憾的是谷歌开发者没有支持像图书馆中的背景色这样的琐碎事情 (3认同)
  • ..澄清,即动作文本颜色,而不是快餐文本本身 (2认同)

Sil*_*ght 20

至于Snackbar它,它的作用与a 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!
Run Code Online (Sandbox Code Playgroud)

注意使用方法的视图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>
Run Code Online (Sandbox Code Playgroud)

至于抽屉菜单,它可能是:

<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>
Run Code Online (Sandbox Code Playgroud)

要么:

<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>
Run Code Online (Sandbox Code Playgroud)

通过使用setNavigationItemSelectedListener()设置OnNavigationItemSelectedListener,您将获得所选项的回调.这为您提供了单击的MenuItem,允许您处理选择事件,更改已检查状态,加载新内​​容,以编程方式关闭抽屉或您可能需要的任何其他操作.

用于编辑文本的浮动标签

即使是谦逊的人EditText也有改进材料设计的空间.虽然EditText单独将在键入第一个字符后隐藏提示文本,但您现在可以将其包装在a中TextInputLayout,从而使提示文本成为上面的浮动标签,从而EditText确保用户永远不会丢失他们输入的内容.除了显示提示外,您还可以EditText通过调用在下方显示错误消息setError().

浮动动作按钮

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

作为FloatingActionButton扩展ImageView,您将使用android:src或任何方法,如setImageDrawable()控制图中显示的图标FloatingActionButton.

标签

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

标签可以通过编程方式添加:

TabLayout tabLayout = ...;
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
Run Code Online (Sandbox Code Playgroud)

如果要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>
Run Code Online (Sandbox Code Playgroud)

现在,当用户滚动时RecyclerView,AppBarLayout可以通过使用孩子的滚动标志来控制他们进入(滚动屏幕)和退出(滚动屏幕)的方式来响应这些事件.

设计库,AppCompat和所有Android支持库是提供构建现代,外观漂亮的Android应用程序所需的构建块的重要工具,无需从头开始构建所有内容.