昨天发布了针对开发人员的Android M预览版。像往常一样,引入了许多令人惊叹的新功能。我注意到Snackbar
就是其中之一。
我已阅读有关Snackbar
的文档,我从中了解到Snackbar位于Android设计支持库的库中,其绝对路径为android.support.design.widget.Snackbar
。
文件说:
Snackbars提供有关操作的轻量级反馈。他们展示 移动和左下方屏幕底部的简短消息 在较大的设备上。 Snackbars出现在所有其他元素之上 屏幕,一次只能显示一个。
超时后或用户交互后,它们会自动消失 在屏幕上的其他地方,特别是在召唤a的交互之后 新的表面或活动。 Snackbars可以在屏幕上刷掉。
那么,Snackbar
的行为是Toast
还是Dialog
?可以在布局文件中使用Snackbars吗?我怎么能以编程方式使用它?
P.S。:
答案 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();
就像吐司一样。
要分配操作,您必须设置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滚动向上提供小吃店,只需拥有一个{{ 3}}在视图层次结构中。
答案 1 :(得分: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);
像魅力一样工作; - )
答案 2 :(得分:20)
对于Snackbar
,它的行为类似Toast
,但与Toast
不同。 Snackbars 显示在屏幕底部,包含带有可选单个操作的文本。它们通过设置屏幕动画,在给定的时间长度后自动超时。此外,用户可以在超时之前将它们擦掉,这比吐司更强大,这是另一种轻量级的反馈机制。
您可以通过编程方式使用它:
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 +),其中包含导航抽屉视图 strong>,用于编辑文字的浮动标签,浮动操作按钮,小吃栏,标签等等。< / p>
导航视图
导航抽屉可以成为您应用中身份和导航的重要焦点,此处设计的一致性可以使您的应用轻松导航,尤其是初次使用者。 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
,确保用户永远不会丢失他们输入的内容。除了显示提示外,您还可以通过调用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>
现在,当用户滚动RecyclerView
时,AppBarLayout
可以使用子项的滚动标记来控制这些事件,以控制它们进入的方式(在屏幕上滚动)和退出(滚动屏幕)
设计库,AppCompat和所有Android支持库是提供构建现代,外观漂亮的Android应用程序所需的构建块的重要工具,无需从头开始构建所有内容。
答案 3 :(得分: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();
答案 4 :(得分: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();
答案 5 :(得分:0)
答案 6 :(得分: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();
答案 7 :(得分:-1)
在android中制作一个小吃吧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();