0

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

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

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

所有 3 台设备都给出不同的结果。

  • 运行 API 18 的 AVD 在主要活动和次要活动中显示带有操作栏的应用程序。在第二个活动中按下操作栏中的徽标会返回到父活动。

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

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

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

public class MainActivity extends ActionBarActivity { ... }

并在 <application> 标记中的清单中

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

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

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

4

2 回答 2

0

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

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

祝你好运 ;)

于 2013-09-24T01:34:13.347 回答
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 语句应该已经存在(我将其注释掉,因为它被遗漏了教程中的一些代码示例。保留它!)。getSupportActionBar() 需要在较旧的 API 上使用(确保正确包含 appcompat 库)。在旧 API 上使用 getActionbar() 会导致强制关闭。使用 setHomeButtonEnabled() 也可以,但在操作栏中没有 < 图标。

感谢您的答复。如果有人有其他建议或提示,我们随时欢迎。(是否都需要 if 语句?)

于 2013-09-27T10:18:09.100 回答