将 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+ 设备的主要内容,如果未能解决你的问题,请参考以下文章