Различные контроллеры для телефонов и планшетов - PullRequest
4 голосов
/ 15 сентября 2011

Есть ли способ иметь два разных кода Java для одного приложения Android?Один предназначен для телефонных устройств, а другой - для планшетных устройств.

Например, что-то вроде HomeActivity.java и HomeActivity-large.java

По сути, я хотел бы создать приложение для Android с другим макетомследуя его разрешению.

Я знаю, что могу использовать layout-large, чтобы иметь определенную компоновку для больших устройств.Я не уверен, как создать конкретную логику для планшетов, а другую - для телефонных целей.

Причина, по которой я хочу это сделать, заключается в том, что я хотел бы сделать вызов API на экране, который я не делаю.не хочу делать по телефону.

В качестве альтернативы я подумал об использовании логического (я не уверен, какое) для проверки того, на каком устройстве работает приложение.Но я боюсь, что это может запутаться.

Другая вещь может состоять в том, чтобы создать библиотеку со всеми функциями моего приложения, а затем два разных приложения, использующих библиотеку.Проблема с этим решением заключается в том, что некоторый код будет реплицирован.

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 15 сентября 2011

Опция 1 : чтобы иметь один проект, который компилируется в одно или несколько приложений, вам необходимо использовать условную компиляцию.По сути, что-то вроде этого

//#ifdef Phone
// do something here
//#else Tablet
// do something else
//#endif

См. Java (Eclipse) - условная компиляция , чтобы узнать, как выполнить условную компиляцию для Android в Eclipse.

Option 2 : Вы можете проверить размер экрана во время выполнения, чтобы определить, какой интерфейс отображать.См .:

http://developer.android.com/guide/practices/screens_support.html

xlarge screens are at least 960dp x 720dp
large screens are at least 640dp x 480dp
normal screens are at least 470dp x 320dp
small screens are at least 426dp x 320dp
1 голос
/ 15 сентября 2011

Различные решения, только первые два, которые я могу себе представить:

1) Поместите на макеты планшета вид с определенным идентификатором и видимым атрибутом, установленным на GONE. После того, как вы раздули макет, проверьте наличие представления с помощью findViewById (...). Если результат нулевой, то вы находитесь в макете смартфона, в противном случае вы находитесь на планшете. Этот подход полностью основан на обнаружении разрешения устройства автоматизированной системы.
2) Используйте этот фрагмент кода, чтобы получить ширину и высоту экрана в пикселях, и решить, какой код вы будете выполнять.

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Log.d("log", "Screen is " + metrics.widthPixels + "x" + metrics.heightPixels);
...