所以我有一些关于实施Android操作栏的问题。到目前为止,我还没有真正制作任何(在我看来)足以投放市场的应用程序。这似乎是我无法理解布局和操作栏如何在不同版本的Android中工作。
当然谷歌似乎是最好的选择,但我遇到了一些灰色地带,也许有人可以清理。我可以看到Action栏是在API level 11中实现的,但是当我尝试在低于3.0的设备上运行它时会发生什么?此外,this似乎在了解如何以及在何处使用操作栏时最有帮助,但这是否意味着操作栏以编程方式完成而不是在布局中完成?我想通过使用操作栏可以说我有点“恐吓”,因为我会在不同的设备中获得不同的布局...所以有没有办法使它“看起来”像我有一个动作栏虽然它完全是通过布局完成的?或者这是一个坏习惯进入?
我听说也许compatibility library可能效果很好,但我真的不知道它做了什么,我还不足以理解关于它“真正”做什么的android文档。如果它真的“有用”支持旧设备,为什么它不是在SDK中构建/标准化的?
我知道这是一个非常广泛的问题,但是当它归结为它时,我只想知道是否真的有办法使我的所有布局看起来和工作相同,或者它是否值得我的时间并让旧设备的操作栏自动降级。
还有一个问题,我有一个Galaxy Nexus和所有核心Google Apps看起来很棒的操作栏,但有没有办法看到这些更新的应用程序在API 11或更低版本上运行?
最后,如果有人偶然发现任何一个很好的教程,请列出来。我真的想要了解Android布局在所有API级别中的工作方式。
答案 0 :(得分:4)
我可以看到Action栏是在API级别11中实现的,但是当我尝试在低于3.0的设备上运行它时会发生什么?
默认情况下,用户将像以前一样获得选项菜单。或者,正如Weening先生指出的那样,使用ActionBarSherlock让操作栏恢复到Android 2.1。
但这是否意味着操作栏以编程方式完成,而不是在布局中完成?
它与选项菜单相同,主要使用菜单资源和Java代码。
如果支持旧设备确实“有用”,为什么不在SDK中构建/标准化?
欢迎您创建一个时间机器,并及时将该代码添加到可追溯到2009年的Android设备上。您可以在eBay上找到一个使用频率较低的磁通电容,尽管追踪一下Fusion先生单位可能会有点麻烦。或者,如果您在英国,请查看您是否可以找到使用过的TARDIS经销商。
与此同时,我们其他人将使用Android支持包部分来支持片段的后端,GridLayout
等,因此我们可以使用旧设备不具备的新功能,同时使用新设备上的本机实现保持API保真度。
答案 1 :(得分:3)
要支持具有相同操作栏的旧版Android,您可以查看Action Bar Sherlock
从他们的网站:
库将在适当时自动使用本机操作栏,或者将自动在您的布局周围包装自定义实现。这使您可以从2.x及以上的每个Android版本轻松开发带有操作栏的应用程序
这很有效。
如果你有点冒险,并且你想要更多地控制它的布局,外观和感觉,你总是可以尝试自己实现它。这不是一件容易的事,但是操作栏更像是ux设计而不是实际组件。兼容库的代码是一个很好的起点。
答案 2 :(得分:1)
如果你只需要一个菜单,一个标题和一个图标,这是一个简单的方法:
actionbar.xml
在您的活动中实施此功能
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.actionbar, menu);
return true;
}
由于这与旧版本的菜单大致相同,旧版本只缺少ActionBar,而是使用旧菜单。
如果你想在所有版本中使用相同的ActionBar,包括API 11之前,正如Geert已经建议的那样:
答案 3 :(得分:0)
如果您尝试在不受支持的Android版本上使用ActionBar,那么它只会使您的应用程序崩溃。要解决这个问题,您可以实现使用本机ActionBar的ActionBarSherlock库(如果可用),否则它会创建自己的具有相同功能的库。您还可以在运行时检查Android版本并自行处理。我会检查这个链接,因为它实际上有一个ActionBar示例:
http://developer.android.com/training/basics/supporting-devices/platforms.html#version-codes