不使用V4支持库实现带有选项卡的Android滑动视图

24
我以前多次使用带选项卡的滑动视图来创建视图,正如Android文档中所述。实际上,逐步通过Eclipse项目向导设置基本UI时使用了ViewPager。
我的问题是:
我正在构建的应用程序只支持到Android 4.0(API级别14)。因此,我考虑完全放弃支持包。但是,我似乎找不到不使用ViewPager(仅在支持程序包中可用)的带有选项卡的Swipe View示例。
是否有与ViewPager等效的API级别14及以上版本,并且能否给我一个使用支持库的工作示例而不使用Swipe View with Tabs接口?
否则,是否有人能够提出一个好的理由,说明为什么我甚至不应该费心使用支持程序包并感到满意。
编辑:我要寻求关于支持库特定功能(例如ViewPager)的权威答案。这些功能最终会合并到核心API中吗?还是我们将继续使用支持程序包来实现这些类型的功能?请使用API版本和时间表具体说明。
编辑-1/15:我更新了这个问题,以停止我收到的“我也是”的答案。在发布这个问题时,Android开发人员文档对支持库与不包括在核心SDK中的功能之间的目的更加含糊。此后,他们更新了文档以澄清事情:

Android支持库包是一组代码库,提供了Android框架API的向后兼容版本以及仅可通过库API获得的功能。

这当然让事情变得更加清晰,并通知开发人员不要期望ViewPager等功能会被纳入核心SDK功能中。我接受了最与我遇到的问题相关的答案。即如何在不显着改变代码库的情况下添加支持程序包功能。

我认为如果你想支持较低的API,你应该使用Actionbarsherlock。它与ViewPager一样流畅。如果你想看,我可以发布代码。 - Ye Lin Aung
@YeLinAung - 我想你误读了我的问题。我实际上并不想支持较低的API,只支持14及以上版本。不过,我会查看ActionBarSherlock(这是我一直想做的事情)。谢谢。 :-) - SBerg413
2
你的问题实际上只有 Android SDK 工程师才能回答。根据兼容性包随时间演变的方式(以及它的当前状态),如果你想要 ViewPager 功能,那么你就必须使用它。但是,你可以复制其代码(并修改为使用当前类),以制作自己的最新 ViewPager(并放弃支持库)。当然,这意味着你需要自己维护这个类(基本上要观察任何新版本的兼容性包是否更改了 ViewPager 代码)。 - user
@Luksprog - 这里曾经有一些Android SDK工程师在S.O上活跃。这正是我所寻找的,也是我开启悬赏的原因。虽然正在开发的应用程序已经发布(带有支持包等),但更多的是出于好奇心。感谢您的建议。 - SBerg413
6个回答

12

我知道这是一个非常老的问题,但我认为它仍然具有相关性。
我正在寻找一个解决方法:使用viewpager而不必将所有整个项目转换为v4支持库。

答案是 v13支持库!。通过这种方式,您可以在活动中拥有一个viewpager,然后使用 android.support.v13.app.FragmentStatePagerAdapter 来保持与片段和其他有用的内容的兼容性。

希望它能帮助某些沉迷于谷歌搜索的人。


1

正如@Luksprog所提到的,您可以将ViewPager代码复制到自己的项目中,并用本机支持库替换参考。很可能您还需要对FragmentPagerAdapter、FragmentStatePagerAdapter和PagerAdapter做同样的操作。我从grepcode.com获取了代码。

尽管我是Android初学者,但我花了2个小时才完成这个技巧。但这意味着要维护更多的代码行,并最终切换回支持库。


0

你也可以使用ViewFlipper类,但你需要手动实现动画和GestureDetector,你可以在这里找到一些代码here


0

虽然我不是Android SDK大师,但我会使用Support Library。以下是RenderScript文档的摘录:

"我们强烈建议使用Support Library API来访问RenderScript,因为它们包括了RenderScript计算框架的最新改进,并提供更广泛的设备兼容性。"

这是针对v8 Support Library的建议,但我想这个建议可以推广到其他版本。最新的改进应该在Android的支持库中,因为它们可以独立于平台更新进行更新。

在发布之前,请确保启用ProGuard,以便削减未使用API的冗余部分。


-1

-1
一般来说,建议使用支持库,因为它包含每个API的最新代码。B.Young在RenderScript上指出的适用于所有其他API。
-------- 无需继续阅读。
让我们举个例子。假设Android 8发布时引入了一个新类来保存与键关联的值,称为FastMap。为了支持旧版本,Google发布了带有这个新类的支持库,并在两个月后在性能测试期间找到了一种使其更有效的方法,因此发布了该支持库的更新版本,其中包括FastMap的优化版本(因为Android OS被冻结在手机中)。
此外,由于大型版本始终有些仓促,Google意识到他们引入了一个非常特定的错误(是的,这种情况确实发生过),这个错误得到了新的更新修复。
因此,如果要为Android 8及以上版本构建Android应用程序并使用内置API,则会错过所有这些在支持代码中的改进。

这个假设的例子是不准确的。如我在我的问题中特别指出的ViewPager这样的功能完全包含在Support Library版本中。你似乎是在暗示Support Library版本可以解决核心SDK中的错误。但它们并不能。而且,我特别提到了一个应用程序不支持遗留操作系统版本的场景。 - SBerg413
如果我的回复不够清晰,我很抱歉。我理解您不支持旧版操作系统。即使在这种情况下,使用支持库仍然是一个更好的选择。谷歌开发人员虽然有期限和时间表,但仍然是人类,因此错误、不清晰和性能不佳的代码可能会进入SDK发布和文档中。其中大部分会在后续版本中得到修复或改进,但支持库也是优化的重要组成部分,请注意,支持库代码通常是最新的实现。 - Jose L Ugia
你再次在暗示支持库的发布解决了核心SDK版本中的问题。但事实并非如此。像ViewPager这样的功能完全包含在支持包发布中。因此,如果您不支持旧的操作系统版本,并且没有计划使用这些附加功能,则没有理由使用支持库。 - SBerg413
不是说支持包显然就是为了那个而设计的,但你可以在那里找到类似的改进。你的回答很明确,可能你并不是在寻找答案或意见,但这正是StackOverflow的用途。 - Jose L Ugia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接