了解Android中的操作栏

时间:2012-06-20 23:18:34

标签: android android-layout android-actionbar

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

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

我听说也许compatibility library可能效果很好,但我真的不知道它做了什么,我还不足以理解关于它“真正”做什么的android文档。如果它真的“有用”支持旧设备,为什么它不是在SDK中构建/标准化的?

我知道这是一个非常广泛的问题,但是当它归结为它时,我只想知道是否真的有办法使我的所有布局看起来和工作相同,或者它是否值得我的时间并让旧设备的操作栏自动降级。

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

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

4 个答案:

答案 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

http://actionbarsherlock.com/

从他们的网站:

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

这很有效。

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

答案 2 :(得分: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;
    }
    
  4. 由于这与旧版本的菜单大致相同,旧版本只缺少ActionBar,而是使用旧菜单。

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

    http://actionbarsherlock.com/

答案 3 :(得分:0)

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

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