3

我的应用程序正在使用 Actionbar 设置标题并显示根据用户交互不断变化的字幕,我还在操作栏中使用splitActionBarWhenNarrow和显示菜单选项。

我希望我的应用程序支持具有旧版本 android 的设备(低于 API 11),为此我必须设置 android:minSdkVersion="8",但是当我设置低于 11 的最低 sdk 版本时,我Call requires API level 11 (current min is 8): android.app.Activity#getActionBar在操作栏上收到错误():

getActionBar().setTitle(record_name);
getActionBar().setSubtitle("Total: "+BigDecimal.valueOf(total).toPlainString()+"/-");

我试图通过添加一个 if 条件来检查 API 版本来解决这个问题:

int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if(currentapiVersion >= android.os.Build.VERSION_CODES.HONEYCOMB)
{   
    //Use Actionbar to set title and subtitle etc.
    getActionBar().setTitle(record_name);
    getActionBar().setSubtitle("Total: "+BigDecimal.valueOf(total).toPlainString()+"/-");
    getActionBar().setIcon(R.drawable.ic_header);
    getActionBar().setDisplayHomeAsUpEnabled(true);

}
else
{

}

但是它不起作用,我仍然会出错getActionBar()...

如果 API <11,我可以做些什么来解决这个问题并避免使用操作栏,如果 API >=11 则使用操作栏?

4

3 回答 3

2

要删除此警告,您需要告诉 IDE,您知道您使用的方法/文件/类是可用的,因为 SDK 比您支持的最低要求更高。这是通过@TargetApi注释完成的。在您的情况下@TargetApi(Build.VERSION_CODES.HONEYCOMB),注释方法或整个类。

重要提示:这只会删除警告,您仍然必须确保这些方法不会在它们不存在的设备上被调用。

于 2015-09-20T18:07:51.657 回答
1

使用支持库和getSupportActionBar(). 这样,您将拥有每个 API 级别的 ActinBar。Google Android 支持库 v4 以获取更多信息。

于 2015-09-20T14:47:08.870 回答
1
int currentApiVersion = android.os.Build.VERSION.SDK_INT;

为您提供当前的 api 版本。

ActionBar actionBar = getActionBar(); //from API level 11

如果是,null您手头没有操作栏。

你也可以使用getSupportActionBar()

参考: 以编程方式检索 Android API 版本

http://developer.android.com/reference/android/app/Activity.html#getActionBar%28%29

所以我会这样做:

if (currentapiVersion >= android.os.Build.VERSION_CODES.HONEYCOMB) {   
    ActionBar actionBar = getActionBar(); //or SupportActionbar
    if (actionBar != null) {
        //Use Actionbar to set title and subtitle etc.
        actionBar.setTitle(record_name);
        actionBar.setSubtitle("Total: "+BigDecimal.valueOf(total).toPlainString()+"/-");
        actionBar.setIcon(R.drawable.ic_header);
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}
于 2015-09-20T14:53:30.933 回答