首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Android活动修复“调用需要API级别11”?

如何用Android活动修复“调用需要API级别11”?
EN

Stack Overflow用户
提问于 2012-11-30 22:21:14
回答 7查看 32K关注 0票数 8

我刚开始做Android开发,或多或少遵循http://developer.android.com/training/basics/firstapp/starting-activity.html教程,还有一件事一直困扰着我:我有两个类,两个类都是使用“Activity”创建向导创建的:

代码语言:javascript
复制
public class PlacesActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_places);
        // I manually commented out the following line to get it to compile.
        // getActionBar().setDisplayHomeAsUpEnabled(true);
    }
    // ... other methods
}

代码语言:javascript
复制
public class ShowOnePlace extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_one_place);
        getActionBar().setDisplayHomeAsUpEnabled(true);
    }
    // ... other methods
}

Eclipse一直给我带来以下错误:

调用需要API级别11 (当前最小值为8):android.app.Activity#getActionBar 调用需要API级别11 (当前最小值为8):android.app.ActionBar#setDisplayHomeAsUpEnabled

直到我注释掉其中的一行(如上面所示)。现在,这个应用程序似乎在我的Android设备上编译和运行,没有错误。(至少没有那个错误)。

所以:

  • 为什么getActionBar().setDisplayHomeAsUpEnabled(true);在一个类中给出了这个错误,但是在另一个类中,完全相同的行不是错误--甚至不是警告?
  • 在“Activity”创建向导中是否存在错误,而getActionBar().setDisplayHomeAsUpEnabled(true);语句在一个活动中是错误的,但在另一个活动中却是完全正确的呢?
  • 在Eclipse中是否存在bug,而这条语句实际上在这两个活动中都是正常的(或者在这两个活动中都是错误的)?
  • 为了在不将minSdkVersion="8“更改为minSdkVersion="11”的情况下修复这个问题,我需要做什么?我当时的印象是,“AndroidSupport-v4.jar”文件是一个兼容性库,运行在第8版设备上,以处理在version 11设备中本地处理的内容。
  • 当我看到这个错误时,该怎么办呢?
EN

回答 7

Stack Overflow用户

发布于 2014-04-29 08:44:25

使用getSupportActionBar()而不是getActionBar()。这将在低于11的API级别上提供ActionBar特性。

票数 16
EN

Stack Overflow用户

发布于 2012-11-30 23:01:58

简而言之,Action在Android的旧版本中是不可用的,google的支持库也不提供这一功能。这就是林特抱怨的原因--你使用的是API版本8中不存在的代码,它被设置为应用程序支持的最低API级别。如果您想在旧版本的android版本上使用操作栏,请使用名为“”的开源库。

现在,回答你的问题

  1. 这应该是两个类中的一个错误。在其中一个类中,它不是错误的原因实际上并不重要。
  2. 不是
  3. 这两种行为都是错误的
  4. 您必须使用开放源码库,该库在较早的android版本上提供操作栏,也就是说,ActionBar神探夏洛克在这方面做得很好。
  5. 真正正确的做法是打开Android开发者网站,阅读支持库的局限性。
票数 14
EN

Stack Overflow用户

发布于 2014-06-14 14:55:19

如果使用appcompat-v7及更高版本,则不能使用actionbarsherlock,因为两者定义的属性相同。因此,这些图书馆在资源上存在冲突。

要使用支持库,您需要:(我希望您已经下载并将支持库集成到您的项目中)

  1. 您必须从支持库中使用ActionBar,因此您必须用正确的ActionBarActivity实现扩展您的活动。

导入:

代码语言:javascript
复制
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;

活性:

代码语言:javascript
复制
public class PlacesActivity extends ActionBarActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_places);
        // I manually commented out the following line to get it to compile.
        // getActionBar().setDisplayHomeAsUpEnabled(true);
    }
    // ... other methods
}

因此,您可以从旧版本支持的活动中获得actionBar实现:

代码语言:javascript
复制
 ActionBar actionBar = activity.getSupportActionBar();

写代码&玩得开心!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13654039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档