Android решает проблему совместимости с SDK_INT hack;это нормально? - PullRequest
0 голосов
/ 08 февраля 2012

Выполнение следующего (примечание: цель> 3.0)

ActionBar actionBar = getActionBar();

на Android с версией <3.0 (SDK 11) приводит к <code>NoSuchMethodError.

Есть несколько способов обойти это, включая рефлексию и ленивую загрузку класса. Тем не менее, похоже, что следующее работает на всех протестированных мной устройствах (2.3.6, 3.0, 3.1, 4.0):

boolean hasActionBar = android.os.Build.VERSION.SDK_INT >= 11;

if (hasActionBar) {
    ActionBar actionBar = getActionBar();
} else {
    // create custom actionbar
}

Обратите внимание, что параметр SDK_INT равен static final, поэтому, похоже, это работает.

Это правильный способ борьбы с совместимостью?

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

Я верю, пока все настроено правильно.

Из блога Рето Майера: http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html

1 голос
/ 08 февраля 2012

Похоже, это работает благодаря компилятору JIT. Этот код не работает на SDK <2.1, который поддерживает эту теорию. Несмотря на это, это, вероятно, не надежный способ избежать размышлений. </p>

...