developer.android.com培训操作栏 - 正确的结果?

时间:2013-09-24 01:20:32

标签: android android-actionbar

我目前正在关注http://developer.android.com/training/index.html上的教程。 我已完成第一部分并继续使用相同代码的第二部分。

在教程中,目标是制作一个ActionBar。 我选择使用v7 appcompat库来支持android 2.1及更高版本。 我假设它已正确安装(并且已跟随this线程)。

我的问题是,我的结果应该是什么样的? 我已经创建了2个AVD,一个运行API 18,一个运行API 8,我正在自己的手机上测试(Xperia Ray运行Cyanogenmod 9,我认为这是API 15)

所有3个设备都会产生不同的结果。

  • 运行API的AVD显示应用程序在主活动和辅助活动中都带有操作栏。在第二个活动中按动作栏中的徽标将返回父项活动。

  • Xperia Ray手机(API 15)还会在两个活动中显示操作栏,但在按下后不会返回到父活动。我想我仍然需要编程并且在API 15中不是标准的吗?

  • 运行API的AVD在主要活动中显示了一个带有应用名称的操作栏,但在第二个活动中显示没有操作栏

这是我使用的代码,来自上面链接的教程:

public class MainActivity extends ActionBarActivity { ... }

并且在<中的清单中申请>标签

android:theme="@style/Theme.AppCompat.Light"

这是否应该足以让动作栏出现在较低版本的android中,或者除了较低版本的主要活动之外它是否应该显示动作栏? 在继续本教程之前,我想解决这个问题。

如果我的问题需要更多澄清,我很乐意提供。所有帮助表示赞赏。谢谢!

2 个答案:

答案 0 :(得分:0)

我没有AppCompat的经验,但我推荐使用ActionBarSherlock appCompact,非常好用。链接:http://actionbarsherlock.com/

您还可以使用以下内容自定义样式:http://jgilfelt.github.io/android-actionbarstylegenerator/

祝你好运;)

答案 1 :(得分:0)

我发现我做错了什么。 按照教程的说法,第二个活动将没有actionBar。

在每个java文件的活动中,该类必须扩展ActionbarActivity而不是Activity。 (本教程仅明确告知更改主要活动)
- >这会在每个活动中显示一个操作栏。

要在所有版本中显示后退或主页按钮,我这样做:

//Make sure we're running on HONEYCOMB or higher to use ActionBar APIs
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            getActionBar().setDisplayHomeAsUpEnabled(true);
        }
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB && Build.VERSION.SDK_INT >= 7 ) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true); //for older versions
            //getSupportActionBar().setHomeButtonEnabled(true); //without arrow
        }

默认情况下,第一个if语句应该已存在(我已将其注释掉,因为它遗漏了教程中的一些代码示例。保留它!)。 需要在旧API上使用getSupportActionBar()(确保正确包含appcompat库)。在较旧的API上使用getActionbar()会导致强制关闭。 使用setHomeButtonEnabled()也可以,但没有&lt;操作栏中的图标。

感谢您的回复。如果有人有其他建议或提示,我们随时欢迎他们。 (是否需要陈述?)