Ответ 1
Те же API-интерфейсы фрагментов теперь доступны как статическая библиотека для использования со старыми версиями Android; он совместим с Android 1.6.
Есть несколько трюков, которые вы можете использовать, чтобы узнать, доступны ли новые API для вашего приложения. Вообще говоря, вы, вероятно, захотите создать два альтернативных набора Деяний, один из которых использует фантастические новые API (ActionBar, Animators и т.д.) - и другой набор, который этого не делает.
В следующем коде показано, как вы можете использовать поиск отражений и исключений для определения доступности API-интерфейсов Fragment и проверки версии, чтобы подтвердить, доступны ли другие 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