Как закодировать обратно совместимую новую функцию в Android SDK?

Я хочу использовать функцию действия, включенную в SDK 11. Однако я также хочу, чтобы приложение запускалось на более ранних устройствах из SDK 10 (2.3.3). Я готов отказаться от функции панели действий для более ранних устройств, поскольку это не важная функция. Я проделал все чтение об отражении, классе обертки и некоторых других методах. Я сейчас не понимаю, как это сделать. Я использую Eclipse.

Если я не устанавливаю цель в Eclipse на sdk 11 или выше, то в любом месте, где у меня есть ссылка на actionBar, возникает ошибка компиляции. Если я поставил цель на sdk 11 или выше, она компилируется, но не покажет, что она может работать на более ранних устройствах. У меня android:minSdkVersion=10 все время.

Может ли кто-нибудь дать мне некоторое представление о том, как сделать ссылки на actionBar и тем не менее заставить его ориентироваться на предыдущий уровень sdk? Заранее спасибо.

Solutions Collecting From Web of "Как закодировать обратно совместимую новую функцию в Android SDK?"

Да! Вы можете это сделать. Попробуйте следовать приведенному ниже шаблону.

В вашем файле AndroidManifest.xml объявите следующее (заменяя версии платформы тем, что требует ваше приложение):

 <!-- Build Target --> <uses-sdk android:targetSdkVersion="14" android:minSdkVersion="7" /> 

Ориентируясь на версию платформы API 11 или выше, вы разрешаете Eclipse связывать (компилировать) с родными классами ActionBar. Предоставление более ранней версии минимальной платформы позволяет вашему приложению быть установленным (запущенным) в более старых версиях Android.

Ваш код активности должен выглядеть примерно так:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (CompatibilityManager.isHoneycomb()) { final ActionBar actionBar = getActionBar(); actionBar.setDisplayShowHomeEnabled(true); // ... } else { // The ActionBar is unavailable! // ... } } 

Если класс CompatibilityManager.java просто предоставляет статические вспомогательные методы для определения текущей версии SDK:

 public class CompatibilityManager { public static final String KINDLE_FIRE_MODEL = "Kindle Fire"; /** * Get the current Android API level. */ public static int getSdkVersion() { return android.os.Build.VERSION.SDK_INT; } /** * Determine if the device is running API level 11 or higher. */ public static boolean isHoneycomb() { return getSdkVersion() >= Build.VERSION_CODES.HONEYCOMB; } /** * Determine if the device is running API level 14 or higher. */ public static boolean isIceCreamSandwich() { return getSdkVersion() >= Build.VERSION_CODES.ICE_CREAM_SANDWICH; } /** * Determine if the current device is a first generation Kindle Fire. * @return true if the device model is equal to "Kindle Fire", false if otherwise. */ public static boolean isKindleFire() { return Build.MODEL.equals(KINDLE_FIRE_MODEL); } } 

Вы также можете рассмотреть возможность использования библиотеки ActionBarSherlock , которая обеспечивает совместимый API ActionBar вплоть до Android 2.x:

Библиотека будет автоматически использовать собственную панель действий, когда она будет доступна, или автоматически добавит пользовательскую реализацию вокруг ваших макетов. Это позволяет легко разрабатывать приложение с панелью действий для каждой версии Android через 2.x.

Повеселись!