到目前为止,我们一直在我们的应用程序中使用Toasts,因为我们计划采用Support Design Library的一些新功能.我想知道Snackbar与Toast的推荐用法是什么.
我一直在谷歌材料snackbar doc上阅读.
Snackbars在移动设备和桌面左下方的屏幕底部的小弹出窗口中提供有关操作的轻量级反馈.它们首先是屏幕上的元素,包括FAB.
和祝酒词.
Android还提供了一个胶囊形状的吐司,主要用于系统消息传递.Toasts与snackbars类似,但不包含动作,不能在屏幕上滑动.
我明白他们做了什么但我有点困惑何时使用什么.这是否意味着:
所以我开始在设计支持库中使用新的Snackbar,但我发现当你在主题中定义"android:textColor"时,它会应用于快餐栏的文本颜色.如果您的主要文本颜色较暗,这显然是一个问题.
有没有人知道解决这个问题的方法,或者就如何为我的文字着色提出建议?
编辑2017年1月:(答案后)
虽然有一些自定义解决方案可以解决下面的问题,但提供主题Snackbars的正确方法可能会很好.
首先,你可能根本不应该android:textColor
在你的主题中定义(除非你真的知道使用主题的范围).这基本上设置了连接到主题的每个视图的文本颜色.如果要在视图中定义非默认的文本颜色,请android:primaryTextColor
在自定义视图中使用和引用该属性.
但是,对于应用主题Snackbar
,请参考第三方材料文档中的质量指南:http://www.materialdoc.com/snackbar/(遵循程序化主题实现,使其不依赖于xml样式)
以供参考:
// create instance
Snackbar snackbar = Snackbar.make(view, text, duration);
// set action button color
snackbar.setActionTextColor(getResources().getColor(R.color.indigo));
// get snackbar view
View snackbarView = snackbar.getView();
// change snackbar text color
int snackbarTextId = android.support.design.R.id.snackbar_text;
TextView textView = (TextView)snackbarView.findViewById(snackbarTextId);
textView.setTextColor(getResources().getColor(R.color.indigo));
// change snackbar background
snackbarView.setBackgroundColor(Color.MAGENTA);
Run Code Online (Sandbox Code Playgroud)
(您也可以创建自己的自定义Snackbar
布局,请参阅上面的链接.如果此方法感觉过于苛刻,并且您希望通过可能的支持库更新获得自定义Snackbar的可靠方法,请执行此操作.)
或者,请参阅下面的答案,以获得类似且可能更快的答案来解决您的问题.
android android-support-library snackbar android-design-library android-snackbar
我在DialogFragment中显示snackbar在alertDialog的正面点击中.这是我的代码片段.
Snackbar snackbar = Snackbar.make(view, "Please enter customer name", Snackbar.LENGTH_LONG)
.setAction("Action", null);
View sbView = snackbar.getView();
sbView.setBackgroundColor(Color.BLACK);
snackbar.show();
Run Code Online (Sandbox Code Playgroud)
我正在将对话片段的视图传递给快餐栏.我想要背景颜色为黑色?我怎样才能做到这一点?我在DialogFragment中返回alertDialog.我正在设置对话框的主题如下
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Used for the buttons -->
<item name="colorAccent">@color/accent</item>
<!-- Used for the title and text -->
<item name="android:textColorPrimary">@color/primary</item>
<!-- Used for the background -->
<item name="android:background">@color/white</item>
</style>
Run Code Online (Sandbox Code Playgroud)
虽然我将背景颜色设置为白色以进行对话,但是应该通过将背景颜色设置为快餐栏来覆盖它.
android android-dialogfragment material-design android-snackbar
有没有方法可以将snackBar的布局更改为自定义View?
现在它变黑了,我们可以改变背景颜色.但我不知道正确的方法来膨胀新的布局并使其成为snackBars背景?
谢谢...
android android-custom-view android-layout snackbar android-snackbar
Android设计支持库现在包括对Snackbar的支持.
我使用以下代码创建一个:
Snackbar.make(findViewById(R.id.root_layout), result, Snackbar.LENGTH_LONG)
.setAction("Dismiss", new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}).show();
Run Code Online (Sandbox Code Playgroud)
小吃店可以通过刷卡解除.但是,我也想使用自己的Action Button(使用setAction函数创建)来解除它.
但是,似乎没有任何可用的功能可以做到这一点.
我希望Snackbar
(android.support.design.widget.Snackbar)
在活动开始时显示android ,就像我们展示一样Toast
.
但问题是我们必须在创建时指定父布局Snackbar
:
Snackbar.make(parentlayout, "This is main activity", Snackbar.LENGTH_LONG)
.setAction("CLOSE", new View.OnClickListener() {
@Override
public void onClick(View view) {
}
})
.setActionTextColor(getResources().getColor(android.R.color.holo_red_light ))
.show();
Run Code Online (Sandbox Code Playgroud)
如何Snackbar
在没有任何点击事件的情况下在活动开始时显示父布局(如果是点击事件我们可以轻松传递父视图)?
我正在尝试利用Snackbar
Android设计支持库中的新功能来显示多行快餐栏,如http://www.google.com/design/spec/components/snackbars-toasts.html#snackbars-toasts-specs中所示:
import android.support.design.widget.Snackbar;
final String snack = "First line\nSecond line\nThird line";
Snackbar.make(mView, snack, Snackbar.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)
它只显示First line...
在我的Nexus 7上.如何让它显示所有行?
PS:我试过Toast
并显示所有线条.
android android-support-library android-design-library android-snackbar
我正在使用com.android.support:design:22.2.0
图书馆的Snackbar .我用它来撤消删除.为了让我的生活更轻松,我将使UI看起来实际上已从数据源中删除了内容,如果未按下小吃栏中的撤消按钮,则实际执行数据源中的删除操作.所以,我想知道什么时候Snackbar不再可见,所以删除这些项目是安全的.
我可以在Snackbar上调用getView(),但我不确定我应该使用什么样的监听器.我试过setOnSystemUiVisibilityChangeListener()
但是没有用,我相信它只适用于系统状态栏.
此外,Snackbar无法扩展,因为它有一个私有构造函数.
android material-design snackbar android-design-library android-snackbar
是否可以在键盘上方显示Android Snackbar(如Y坐标,而不是分层)?如果显示键盘,Snackbar当前会被隐藏,这是一种不受欢迎的行为.
我试图使用此代码片段获取Snackbar的Textview:
snackbarView.findViewById<TextView>(android.support.design.R.id.snackbar_text)
Run Code Online (Sandbox Code Playgroud)
但Android Studio无法解析设计库.
如何才能使此代码生效?
android textview android-support-library android-snackbar androidx