Как проверить уровень API устройства и использовать Actionbar, если API 11 или выше?
Мое приложение использует Actionbar, чтобы установить заголовок и показать субтитры, которые постоянно меняются в зависимости от взаимодействия с пользователем, я также использую splitActionBarWhenNarrow
и показывая пункты меню на панели действий.
Я хочу, чтобы мое приложение поддерживало устройства с более старой версией Android (ниже API 11), для этого я должен установить android:minSdkVersion="8"
, но когда я устанавливаю минимальную версию SDK ниже 11, я получаю ошибку (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?
3 ответа
Чтобы удалить это предупреждение, вы должны сообщить IDE, что вам известно, что используемые вами методы / файлы / классы доступны с более поздней версии SDK, чем поддерживаемый вами минимум. Это делается через @TargetApi
аннотаций. В твоем случае @TargetApi(Build.VERSION_CODES.HONEYCOMB)
аннотированный метод или весь класс.
Важно: Это только удалит предупреждение, но вы все равно должны убедиться, что эти методы НЕ вызываются на устройствах, где они не существуют.
Используйте библиотеку поддержки и getSupportActionBar()
, Таким образом, вы получите ActinBar для каждого уровня API. Библиотека поддержки Google Android v4 для получения дополнительной информации.
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
Так что я бы сделал:
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);
}
}