将 Snackbar 用于 5.0+ 设备

Posted

技术标签:

【中文标题】将 Snackbar 用于 5.0+ 设备【英文标题】:Using Snackbar for 5.0+ devices 【发布时间】:2016-04-01 12:52:52 【问题描述】:

所以我想创建一个支持棒棒糖及以上设备的应用

但我有一个用例需要Snackbar 和UNDO 选项。看完之后,看来我必须:

使用CoordinatorLayout(支持库一) 使用AppCompatActivity,而不是Activity 使用Theme.AppCompat.(...) 而不是android:Theme.Material 更改应用程序中的所有其他视图,包括 ActionBar 只是为了与 AppCompat 兼容(有点讽刺)

这真的是使用Snackbar 之类的基本功能的唯一方法吗 - 必须在其他地方重写所有内容?

请告诉我有更好的出路。这没有任何意义!

【问题讨论】:

你试过了吗? CoordinatorLayout 不能与普通 Activity 一起使用吗? 试过了,但它只是崩溃了。看来这些事情都需要做! 12-27 18:51:33.441 2199-2199/? E/AndroidRuntime: Process: com.example.perfectday, PID: 2199 12-27 18:51:33.441 2199-2199/? E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfocom.example.perfectday/com.example.perfectday.MainActivity: android.view.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating class android.support.design.widget.CoordinatorLayout 我试过了,堆栈跟踪的关键部分在这里:Caused by: java.lang.IllegalArgumentException: You need to use a Theme.AppCompat theme (or descendant) with the design library. at android.support.design.widget.ThemeUtils.checkAppCompatTheme(ThemeUtils.java:34) at android.support.design.widget.CoordinatorLayout.<init>(CoordinatorLayout.java:178)。所以是的,你需要使用 appcompat 来使用设计库。 是的,我就是这么想的。这太糟糕了! 【参考方案1】:

这真的是使用像 Snackbar 这样的基本功能的唯一方法 - 必须在其他地方重写所有内容吗?

您是否需要CoordinatorLayout 取决于您在何处以及如何显示Snackbar

不过,除此之外,要使用官方的 Snackbar 实现而不进行修改,您必须经历所有这些恶作剧。

欢迎使用independent implementations of the snackbar pattern,如this one that I use。 AFAIK 它们都已被其作者停止使用,以支持正式实施。

【讨论】:

@magicmushroom:“那么当我使用 AppCompat 时,需要更改哪些内容?” -- 主要是你的第二个和第三个项目符号,加上你的菜单资源需要将一些属性移动到自定义命名空间中(例如,app:showAsAction)。 “我是否还需要将每个 TextView/Button 更改为“android.support”?” -- 不,当您使用LayoutInflater(或setContentView())应用布局资源时,会自动应用任何此类转换。 你能帮我实现 MrEngineer13 的库吗?我无法理解如何为 SnackBar 的 2 个单独实例捕获“onMessageClick”。我真的想避免使用设计支持库所需要的不必要的代码。 @CommonsWare @magicmushroom:“我无法理解如何为 SnackBar 的 2 个单独实例捕获“onMessageClick””——我没有使用过该特定功能。我建议您提出一个单独的 Stack Overflow 问题,显示您的代码并详细解释您的问题。【参考方案2】:

根据您在 cmets 中添加的异常跟踪,我认为这是因为您没有在 build.gradle 文件中添加对 'com.android.support:design:23.1.1' 的依赖项。

除了这个CoordinatorLayout 只是用来放置在显示小吃店时可以上下移动的浮动动作

【讨论】:

以上是关于将 Snackbar 用于 5.0+ 设备的主要内容,如果未能解决你的问题,请参考以下文章

ios 5.0 的assetForURL 不适用于设备

棒棒糖前设备中的 Snackbar 高度太大

Flutter - 如何在“Future”中显示“snackbar”

重新打开应用程序后,Snackbar 不再出现

5.0新特性转场动画的实现

Angular 材质 Snackbar 配置与自定义 panelClass 配置,用于错误、成功、警告消息