我正在尝试使用标签作为导航选项来实施操作栏。为此,我选择“New Android App”向导的“New Blank Activity”部分中的“Tabs + Swipe”选项,如下所示。
现在,在android清单中,何时
android:targetSdkVersion="15"
这是默认值,操作栏在Nexus 7 / Nexus 7仿真器上看起来像这样,这是应用程序所需的外观
现在我将android清单中的那一行更改为
android:targetSdkVersion="16"
操作栏的外观更改为此
默认外观对于任何版本的android都是16但是,任何人都可以解释为什么当targetSdkVersion设置为16时,操作栏的外观会突然改变吗?
以上内容可在仿真器和真实连接7中重现。
全屏抓取
正常: http://i.stack.imgur.com/VsBA2.png
在android:targetSdkVersion =“16”之后: http://i.stack.imgur.com/OM6Y4.png
更新 - 2013年3月10日:切换到列表导航模式(而不是Tabs)以启用移动到android:targetSdkVersion = 17
答案 0 :(得分:14)
将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上的堆叠布局。至少你可以设计你的布局,同时知道会发生什么。
请记住,在大多数情况下,切换到横向模式会将它们再次嵌入操作栏,因为有足够的空间"它的衡量方式。