Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android:targetSdkVersion为16时的操作栏行为_Android_Android Layout_Android Manifest_Android Actionbar_Android 4.2 Jelly Bean - Fatal编程技术网

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

android:targetSdkVersion为16时的操作栏行为,android,android-layout,android-manifest,android-actionbar,android-4.2-jelly-bean,Android,Android Layout,Android Manifest,Android Actionbar,Android 4.2 Jelly Bean,我正在尝试实现一个带有选项卡的操作栏作为导航选项。为此,我在“新建Android应用程序”向导的“新建空白活动”部分选择“选项卡+滑动”选项,如下所示 现在,在android清单中,当 android:targetSdkVersion="15" 这是默认值,在Nexus 7/Nexus 7模拟器上,操作栏看起来像这样,这是应用程序所需的外观 现在,当我将android清单中的这一行更改为 android:targetSdkVersion="16" 操作栏的外观将更改为 除了16之外,a

我正在尝试实现一个带有选项卡的操作栏作为导航选项。为此,我在“新建Android应用程序”向导的“新建空白活动”部分选择“选项卡+滑动”选项,如下所示

现在,在android清单中,当

android:targetSdkVersion="15"
这是默认值,在Nexus 7/Nexus 7模拟器上,操作栏看起来像这样,这是应用程序所需的外观

现在,当我将android清单中的这一行更改为

android:targetSdkVersion="16"
操作栏的外观将更改为

除了16之外,android的任何版本都保留默认外观,有人能解释一下为什么当targetSdkVersion设置为16时,操作栏的外观会突然改变吗

上述内容在模拟器以及真实的Nexus7上都是可复制的

完整的屏幕抓图

正常:

在android:targetSdkVersion=“16”之后:

更新-2013年3月10日:切换到列表导航模式(而不是标签)以启用移动到android:targetSdkVersion=17

将targetSDK设置为16时,它之所以会更改,是因为谷歌改变了标签在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);
}
然而,我怀疑你不只是想要一个原因,而是一个解决方案。不幸的是,我不能给你一个简单的方法来设置它只嵌入

不过,我可以建议使用,使其保持一致。这样做的好处是能够在旧设备上使用actionbars。在使用它(肖像)时,我可以确认,如果将targetSDK设置为16,它将在果冻豆、冰淇淋三明治、姜饼和Froyo上使用堆叠布局。至少你能够设计你的布局,同时知道你想要什么


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

这实际上是有记录的。此处::“嵌入式选项卡的新ActionBar策略:在纵向模式下,无论屏幕大小,嵌入式选项卡现在始终堆叠在操作栏中。”谢谢,这很有帮助,我可以使用ActionBar sherlock使其始终嵌入而不是堆叠(如pre-Jellybean默认的操作栏行为)?@Soham我不这么认为,至少我没见过。既然所有较新版本的Android都将使用stacked,为什么不直接使用它,这样以后就不必更改它了?@NikolayElenkov感谢链接。我一直在寻找类似的东西来更好地解释它。ABS在ICS之前的版本上是一致的,但是在JB上它使用本机操作栏,所以你应该得到相同的行为。