Итак, мы видели предварительный просмотр sdk и аккуратные новые вещи, такие как ActionBar и Fragments. Выполнение множества вызовов методов будет неизбежно, чтобы использовать их, поэтому какие стратегии существуют для поддержки 1 версии приложения, что позволит мне использовать все сногсшибательные новые вещи, а также работать с устройствами под управлением 2.3 или ниже? Мое приложение на данный момент составляет 1.5 - 2.3.Стратегии для сотовой и обратной совместимости
ответ
Эти же API-интерфейсы фрагментов теперь доступны как static library для использования со старыми версиями Android; он совместим с Android 1.6.
Есть несколько трюков, которые вы можете использовать, чтобы узнать, доступны ли различные новые API-интерфейсы для вашего приложения. Вообще говоря, вы, вероятно, захотите создать два альтернативных набора Деяний, один из которых использует фантастические новые API (ActionBar, Animators и т. Д.) - и другой набор, который этого не делает.
В следующем коде показано, как вы можете использовать поиск отражений и исключений, чтобы определить доступность API-интерфейсов фрагментов и проверку версий, чтобы подтвердить, доступны ли другие API-интерфейсы Honeycomb.
private static boolean shinyNewAPIsSupported = android.os.Build.VERSION.SDK_INT > 10;
private static boolean fragmentsSupported = false;
private static void checkFragmentsSupported() throws NoClassDefFoundError {
fragmentsSupported = android.app.Fragment.class != null;
}
static {
try {
checkFragmentsSupported();
} catch (NoClassDefFoundError e) {
fragmentsSupported = false;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent startActivityIntent = null;
if (!shinyNewAPIsSupported)
startActivityIntent = new Intent(this, MainNonActionBarActivity.class);
else
startActivityIntent = new Intent(this, MainActionActivity.class);
startActivity(startActivityIntent);
finish();
}
Вообще говоря, вы можете использовать те же определения макета. Там, где доступны фрагменты, вы раздуваете каждый макет в другом фрагменте, где они не вы, вероятно, захотите использовать теги <include>
, чтобы вставить несколько из них в более сложный вид деятельности.
Более подробная работу через того, как написать код для поддержки обратной совместимости на Honeycomb можно найти здесь: http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html
Возможно, вы найдете Reto Meier's article on backwards-compatibility, в частности раздел «Работа с отсутствующими классами».
Я еще не посмотрел на Honeycomb SDK сам, но я, как и вы, надеюсь, что это будет довольно легко и без проблем использовать новые функции, не ставя под угрозу совместимость со старыми устройствами.
Кроме того, проверить этот пост, который дает больше примеров работы с несколькими версиями платформы: http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html – adamp
Я читал они оба, но похоже, что Honeycomb будет более активным, особенно с такими вещами, как Fragments и ActionBar. Как вы думаете, использовать эти методы будет достаточно? –
Удобно, Google Dianne Hackborne разместил a blog entry, охватывая эту точную тему. Google заявляет, что они будут предоставлять статические библиотеки, поэтому более старые версии Android также смогут использовать фрагменты.
Ну Google только что объявил сотовый будет планшет только: http://www.pcmag.com/article2/0,2817,2379271,00.asp
Так что, если устройство предназначено для мобильных устройств только это может даже не быть проблемой.
Официального Android, который поможет вам достичь ActionBar from 1.6 to 4.x
Также, если вам нужен только дополнительный API, это панель действий, чтобы посмотреть на библиотеку, которую я написал, которая является расширением библиотеки совместимости, которая добавляет именно это. Он предоставляет единый API для панели действий и позволяет использовать одну тему. Дополнительную информацию можно найти на сайте http://actionbarsherlock.com. –