android:targetSdkVersion 为 16 时的操作栏行为
Posted
技术标签:
【中文标题】android:targetSdkVersion 为 16 时的操作栏行为【英文标题】:action bar behavior when android:targetSdkVersion is 16 【发布时间】:2012-10-04 16:43:44 【问题描述】:我正在尝试使用选项卡作为导航选项来实现操作栏。为此,我在“New android App”向导的“New Blank Activity”部分选择“Tabs+Swipe”选项,如下所示。
现在,在 android 清单中,当
android:targetSdkVersion="15"
这是默认值,操作栏在 Nexus 7/Nexus 7 模拟器上看起来像这样,这是应用所需的外观
现在,当我将 android 清单中的那一行更改为
android:targetSdkVersion="16"
操作栏的外观变成了这个
除了 16 之外的任何版本的 android 都保留默认外观,谁能解释一下为什么当 targetSdkVersion 设置为 16 时操作栏的外观会突然改变?
以上内容可以在模拟器和真正的 nexus 7 上重现。
全屏截图
正常: http://i.stack.imgur.com/VsBA2.png
在 android:targetSdkVersion="16" 之后: http://i.stack.imgur.com/OM6Y4.png
2013 年 3 月 10 日更新:切换到列表导航模式(而不是选项卡)以启用移动到 android:targetSdkVersion=17
【问题讨论】:
【参考方案1】:将 targetSDK 设置为 16 时发生更改的原因是因为 Google 更改了 Jelly Bean 中标签的测量方式。具体来说,请看android.internal.view.ActionBarPolicy
:
public boolean hasEmbeddedTabs()
final int targetSdk = mContext.getApplicationInfo().targetSdkVersion;
if (targetSdk >= Build.VERSION_CODES.JELLY_BEAN)
return mContext.getResources().getBoolean(R.bool.action_bar_embed_tabs);
// The embedded tabs policy changed in Jellybean; give older apps the old policy
// so they get what they expect.
return mContext.getResources().getBoolean(R.bool.action_bar_embed_tabs_pre_jb);
但是,我怀疑您不仅想要原因,还想要解决方案。不幸的是,我不能给你一个简单的方法来将它设置为仅嵌入。
我可以建议使用ActionBarSherlock 使其一致。这样做的好处是能够在旧设备上使用操作栏。使用它时(纵向),我可以确认如果您将 targetSDK 设置为 16,它使用 Jelly Bean、Ice Cream Sandwich、GingerBread 和 Froyo 上的堆叠布局。至少您可以在设计布局的同时知道会发生什么。
请记住,在大多数情况下,切换到横向模式会将它们再次嵌入到操作栏中,因为它的测量方式有“足够的空间”。
【讨论】:
这实际上是有记录的。此处:developer.android.com/reference/android/os/…:'嵌入式选项卡的新 ActionBar 策略:无论屏幕大小如何,嵌入式选项卡现在始终堆叠在操作栏中,在纵向模式下。' 谢谢,这有帮助,我可以一直使用 ActionBar sherlock 使其嵌入而不是堆叠(如 Jellybean 之前的默认操作栏行为)吗? @Soham 我不这么认为,或者至少我没有看到。既然所有较新版本的 Android 都将使用堆叠,为什么不直接使用它,这样您以后就不必更改它了? @NikolayElenkov 感谢您的链接。我一直在寻找类似的东西来更好地解释它。 ABS 在 ICS 之前的版本上是一致的,但是在 JB 上它使用本机操作栏,所以你应该得到相同的行为。以上是关于android:targetSdkVersion 为 16 时的操作栏行为的主要内容,如果未能解决你的问题,请参考以下文章
android:targetSdkVersion更新引发的“惨案”
android:targetSdkVersion 为 16 时的操作栏行为