Androiddevise支持库的新function以及如何使用其Snackbar?
Android M预览开发者昨天发布。 像往常一样,引入了许多令人惊叹的新function。 我注意到Snackbar
就是其中之一。
我已经阅读了关于Snackbar
的文档,从中我了解到Snackbar在Androiddevise支持库的库中,其绝对path是android.support.design.widget.Snackbar
。
该文件说:
Snackbars提供有关操作的轻量级反馈。 他们在手机屏幕的底部显示一个简短的信息,在较大的设备上左下angular显示。 小吃店出现在屏幕上的所有其他元素的上方,一次只能显示一个。
它们在超时之后或在用户与屏幕上其他地方交互之后自动消失,特别是在召唤新的表面或活动的交互之后。 小吃店可以从屏幕上掉下来。
那么, Snackbar
行为就像是Toast
还是Dialog
? Snackbars可以在布局文件中使用吗? 我怎样才能以编程方式使用它?
PS:
- 任何使用小吃店的样品将不胜感激。
- Androiddevise支持库是一个新的支持库,有人可以告诉我这个库的更多细节吗?
新的Snackbar
不需要Android-M 。
它位于新的devise支持库中 ,您可以在今天使用它。
只需更新您的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();
如果您希望将某些内置function用作滑动解除手势,或者使用FAB滚动快捷栏,只需在视图层次结构中添加CoordinatorLayout
即可。
在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();
并改变文字颜色(尽pipe主题):
View view = snack.getView(); TextView tv = (TextView) view.findViewById(android.support.design.R.id.snackbar_text); tv.setTextColor(Color.WHITE);
奇迹般有效 ;-)
至于Snackbar
,它就像一个Toast
但不同于Toast
。 在屏幕的底部显示小吃店 ,并包含可选的单一行动的文字。 它们在给定的时间长度之后,通过animationclosures屏幕自动超时。 另外,用户可以在超时之前将它们刷掉,这比另一个轻量级的反馈机制的吐司强大得多。
你可以像这样以编程方式使用它:
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()
方法中使用View – Snackbar
会尝试查找它,以确保它被锚定在其底部。
更重要的是, Androiddevise支持库用于Android 2.1+(API 7+) ,其中包括导航抽屉视图 , 用于编辑文本浮动标签 , 浮动操作button , 小吃店 , 标签等类似的东西。
导航视图
导航抽屉可以成为您的应用程序中身份和导航的重要焦点,在devise中的一致性可以使您的应用程序的导航方式(尤其是初次使用的用户)变得相当不同。 通过为导航抽屉提供所需的框架以及通过菜单资源来扩充导航项目的function, 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来获取选定项目的callback。 这为您提供了被点击的MenuItem,允许您处理select事件,更改检查的状态,加载新的内容,编程closures抽屉或任何其他您可能需要的操作。
用于编辑文本的浮动标签
即使是不起眼的EditText
在材料devise上也有改进的空间。 单独的EditText
将在input第一个字符后隐藏提示文本,现在可以将其包装在TextInputLayout
,使提示文本成为EditText
上方的浮动标签 ,从而确保用户不会丢失input内容的上下文。 除了显示提示之外,还可以通过调用setError()
在EditText
下面显示错误消息。
浮动行动button
浮动操作button是一个圆形button,表示您的界面上的主要操作。 devise库的FloatingActionButton
为您提供了一个一致的实现,默认情况下,使用主题中的colorAccent
着色。
由于FloatingActionButton
扩展了ImageView
,因此您将使用android:src
或诸如setImageDrawable()
类的任何方法来控制FloatingActionButton
显示的图标。
标签
顶级导航模式通常用于组织不同的内容分组。 devise库的TabLayout
实现了两个固定的选项卡,其中视图的宽度在所有选项卡之间平均分配,以及可滚动选项卡,其中选项卡不是统一大小,并且可以水平滚动。
选项卡可以通过编程添加:
TabLayout tabLayout = ...; tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
如果要使用ViewPager
在标签之间进行水平分页,可以直接从PagerAdapter's
getPageTitle()
创build标签,然后使用setupWithViewPager()
将两者连接在一起。 这可以确保选项卡select事件更新ViewPager
和页面更改更新选定的选项卡。
CoordinatorLayout和应用程序栏
devise库引入了CoordinatorLayout
,这是一个布局,它提供了子视图之间的触摸事件的一个附加级别的控制,这是Design库中许多组件利用的。 如果您尝试使用AppBarLayout,则允许您的Toolbar
和其他视图(如TabLayout
提供的选项卡)对用ScrollingViewBehavior标记的兄弟视图中的滚动事件作出反应。 因此,您可以创build一个布局,如:
<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
可以通过使用儿童的滚动标志来控制他们进入的方式(在屏幕上滚动)并退出(滚动屏幕)来响应这些事件。
devise库,AppCompat以及所有的Android支持库都是提供构build现代,美观的Android应用程序所需的构build块的重要工具,无需从头开始构build一切。
我设置密码
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();
小吃店也能够显示图标。
例如:对于没有networking,你可以显示这样的小吃吧(就像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();
您还可以更改快餐栏的文本颜色和背景
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();
在android中制作小吃棒十秒钟很简单
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();