Эта запись уже устарела, но я не нашел вопроса в другом месте на этом сайте, и я думаю, что этот совет, вероятно, больше не соответствует действительности - возможно, он даже не был лучшим даже тогда, но это могло быть неочевидным.
Лучший совет, вероятно, в:
https://developer.android.com/guide/practices/tablets-and-handsets.html
хотя это не всегда понятно. У меня была похожая проблема: у меня есть приложение, которое перечисляет некоторые записи (они являются датами), и если вы нажимаете на даты, поведение телефона таково, что он переключается на новый экран с информацией об этих датах. Упрощение, но, надеюсь, вы поняли идею. «Новый экран» - это новое занятие. Я хотел настроить поведение планшета так, чтобы бит «нового экрана» показывался справа или под списком дат - вы всегда его увидите.
Оба действия были написаны как стандартные - без использования каркасов. Основное изменение, которое я должен был сделать, - это реструктурировать DetailActivity в качестве фреймворка с очень тонким действием вокруг него. Если бы я следовал связанным рекомендациям, я бы также реструктурировал MainActivity аналогичным образом, но я этого не сделал - казалось бы, в этом нет реальной необходимости. Вместо этого я переписал MainActivity для обработки того, присутствует ли DetailFragment или нет - например, когда вы нажимаете на даты, он либо обновляет фрагмент напрямую, либо создает намерение открыть DetailActivity. Ключевой частью этого является утверждение:
mDetailFragment = (DetailFragment) getSupportFragmentManager().findFragmentById(R.id.frag_detail);
, который идет в методе onCreate () действия после SetContentView (). Укажите здесь, если фрагмент не существует в макете, тогда возвращается значение null - в последующем коде есть несколько мест по строкам «if (mDetailFragment! = Null)».
При том, что это просто вопрос наличия разных макетов для планшетов. В настоящее время рекомендуется использовать наименьшую ширину экрана, поэтому для макета планшета используйте каталог layout layout-sw600dp. На самом деле в моем сценарии использования я хотел использовать разные макеты для альбомной ориентации (подробности справа) и портретной (подробности ниже), поэтому у меня были отдельные версии layout-sw600dp-land и layout-sw600dp-port основного файла макета активности.
Один удар по этому, и если есть проблема с этим подходом, то это то, что другие файлы макета также могут нуждаться в дублировании. Например, макет существующего DetailsActivity уже имеет разные книжную и альбомную версии - оптимизируя пространство экрана. Получается, что если вы поместите детали справа на планшет, то экранное пространство нуждается в книжной ориентации - пространство больше, чем шире. По крайней мере, это верно для моего использования. Точно так же пространство фрагмента, когда планшет находится в портретном положении, естественно имеет ландшафтную форму. Чтобы обойти это, я копирую файл frag_detail.xml из layout-land в layout-sw600dp-port. Если я изменю один из этих файлов, я должен изменить оба. Было бы неплохо не иметь!