0

所以我有几个关于实现Android操作栏的问题。到目前为止,我还没有真正制作出任何(在我看来)足以投放市场的应用程序。这似乎真的是我无法理解布局和操作栏将如何在不同版本的 Android 中工作。

当然,谷歌似乎是最好的选择,但我遇到了一些可能有人可以清理的灰色区域。我可以看到操作栏是在API 级别 11中实现的,但是当我尝试在低于 3.0 的设备上运行它时会发生什么?此外,在了解如何以及在何处使用操作栏时,似乎是最有帮助的,但这是否意味着操作栏全部以编程方式完成,而不是在布局中?我想可以肯定地说使用操作栏让我有点“害怕”,因为我会在不同的设备中获得不同的布局......所以有没有办法让它“看起来”像我有一个操作栏,即使它纯粹是通过布局完成的?或者这是一个坏习惯?

我听说兼容性库可能运行良好,但我真的不知道它的作用,而且我还不够聪明,无法理解 android 文档“真正”的作用。如果它确实对支持旧设备很有帮助,为什么它不在 SDK 中构建/成为标准?

我知道这是一个非常广泛的问题,但归根结底,我只是想知道是否真的有一种方法可以让我的所有布局看起来和工作起来都一样,或者它是否值得我花时间并且只是拥有旧设备的操作栏自动降级。

还有一个问题,我有一个 Galaxy Nexus,所有核心 Google Apps 的操作栏看起来都很棒,但是有没有办法看到这些更新的应用程序在 API 11 或更低版本上运行?

最后,如果有人偶然发现了一个很棒的教程,请列出它。我真的很想了解 Android 布局如何在所有 API 级别中工作。

4

4 回答 4

4

我可以看到操作栏是在 API 级别 11 中实现的,但是当我尝试在低于 3.0 的设备上运行它时会发生什么?

默认情况下,用户将像以前一样获得选项菜单。或者,正如 Weening 先生所指出的,使用 ActionBarSherlock 让操作栏回到 Android 2.1。

但这是否意味着操作栏全部以编程方式完成,而不是在布局中?

它与选项菜单相同,主要使用菜单资源和 Java 代码。

如果它确实对支持旧设备很有帮助,为什么它不在 SDK 中构建/成为标准?

欢迎您创建一台时间机器并及时返回,将该代码添加到可追溯到 2009 年的 Android 设备。您可能可以在 eBay 上找到一个很少使用的磁通电容器,但可能要找到一个 Mr. Fusion 设备麻烦一些。或者,如果您在英国,请查看是否可以找到二手 TARDIS 经销商。

与此同时,我们其他人将部分使用 Android Support 包来支持其片段的反向移植GridLayout等,因此我们可以使用旧设备非原生的新功能,同时保持 API 与原生实现的保真度较新的设备。

于 2012-06-20T23:34:32.433 回答
3

要支持具有相同外观操作栏的旧版本的 android,您可以查看 Action Bar Sherlock

http://actionbarsherlock.com/

从他们的网站:

该库将在适当时自动使用本机操作栏,或者会自动围绕您的布局包装自定义实现。这使您可以轻松地为 2.x 及更高版本的每个版本的 Android 开发带有操作栏的应用程序

这工作得很好。

如果您更喜欢冒险并且想要更多地控制它的布局、外观和感觉,您总是可以尝试自己实现它。这不是一件容易的事,但操作栏更像是一个用户体验设计,而不是一个实际的组件。兼容性库的代码是一个很好的起点。

于 2012-06-20T23:26:20.080 回答
1

如果您只需要一个菜单​​、一个标题和一个图标,那么简单的方法是:

  1. 选择带有 ActionBar 的主题,例如“Theme.Holo”
  2. 创建一个新菜单,即actionbar.xml
  3. 在你的活动中实现它

    @Override
    public boolean onCreateOptionsMenu(Menu menu){
        MenuInflater inflater = getMenuInflater(); 
        inflater.inflate(R.menu.actionbar, menu);
        return true;
    }
    

由于这与旧版本中的菜单大致相同,因此旧版本只是缺少 ActionBar,而是使用旧菜单。

或者

如果您希望在所有版本(包括 API 11 之前)中使用相同的 ActionBar,正如 Geert 已经建议的那样:

http://actionbarsherlock.com/

于 2012-06-20T23:38:45.533 回答
0

如果您尝试在不受支持的 Android 版本上使用 ActionBar,那么它只会使您的应用程序崩溃。为了解决这个问题,您可以实现库 ActionBarSherlock,如果可用,它使用本机 ActionBar,否则它会创建自己的具有相同功能的库。您也可以在运行时检查Android版本并自行处理。我会检查这个链接,因为它实际上有一个 ActionBar 示例:

http://developer.android.com/training/basics/supporting-devices/platforms.html#version-codes

于 2012-06-20T23:43:08.553 回答