当前位置: 首页 > 知识库问答 >
问题:

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

宰父子安
2023-03-14

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

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
}

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。应用程序。活动#getActionBar

调用需要API级别11(当前最小值为8):android。应用程序。ActionBar#设置DisplayHomeAsupaned

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

所以:

  • 为什么是getActionBar()。设置DisplayHomeAsupEnabled(真) 在一个类中给出错误,但在另一个类中,完全相同的行不是错误,甚至不是警告
  • “Android活动”创建向导中是否存在错误,以及getActionBar()。设置DisplayHomeAsupEnabled(真) 语句在一个活动中是错误的,但在另一个活动中是完美的
  • EclipseLint中是否存在bug,并且该语句在两个活动中都是正确的(或者在两个活动中都是错误的)
  • 我必须做些什么才能在不将minSdkVersion=“8”更改为minSdkVersion=“11”的情况下修复此问题?我当时的印象是,“android-support-v4.jar”文件是一个兼容库,运行在8版设备上,用来处理11版设备本机处理的内容
  • 当我看到这个错误时,真正正确的做法是什么

共有3个答案

辛渝
2023-03-14

如果您使用appcompat-v7和更高版本,您不能使用actionbarsherlock,因为两者都定义了相同的属性。所以这个库在资源上有冲突。

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

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

进口:

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;

活动:

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实现:

 ActionBar actionBar = activity.getSupportActionBar();

写代码

燕璞
2023-03-14

简而言之,旧版本的Android系统中没有操作栏,谷歌的支持库也不提供该功能。这就是lint抱怨的原因——你正在使用API verison 8中不存在的代码,它被设置为你的应用程序支持的最低API级别。如果你想在旧的android版本上使用action bar,可以使用名为“action bar Sherlock”的开源库。

现在,回答你们的问题

  1. 这在两个类中都应该是错误的。在其中一个类中它不是错误的原因实际上并不重要
叶富
2023-03-14

使用getSupportActionBar()而不是getActionBar()。这将在API级别低于11的情况下提供ActionBar功能。

 类似资料: