Как проверить уровень 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);
    }
}
Другие вопросы по тегам