android - android :targetSdkVersion is 16 时的操作栏行为

标签 android android-layout android-manifest android-actionbar android-4.2-jelly-bean

我正在尝试使用选项卡作为导航选项来实现操作栏。为此,我在“New Android App”向导的“New Blank Activity”部分选择“Tabs+Swipe”选项,如下所示。

Tab+Swipe wizard option

现在,在 android list 中,当

android:targetSdkVersion="15"

这是默认值,操作栏在 Nexus 7/Nexus 7 模拟器上看起来像这样,这是应用所需的外观

Default behavior

现在,当我将 android list 中的那一行更改为

android:targetSdkVersion="16"

操作栏的外观变成了这个

Behaviour after 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

最佳答案

将 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 上的堆叠布局。至少您可以在设计布局的同时知道会发生什么。

请记住,在大多数情况下,切换到横向模式会将它们再次嵌入到操作栏中,因为它的测量方式有“足够的空间”。

关于android - android :targetSdkVersion is 16 时的操作栏行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12883258/

相关文章:

android - 仅在发布版本中将 screenOrientation 设置为 "portrait"

android - API 23中的Android权限正常权限和危险权限列表?

android - 未安装带有 Google Play 服务 lib froyo 的应用程序?

c# - 查找给定 ID 的资源 - 作为变量

java - Viewpager 在低内存终止时松散 fragment 连接

android - 第二次打开时从数字选择器中突出显示所选项目

android - Android 上带有远程 View 的自定义通知

java - Nexus 7 上的广播接收器

android - 查找手机位置

android - 更改帮助屏幕的 View