Те же API фрагментов теперь доступны как статическая библиотека для использования с более старыми версиями 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