Разный графический интерфейс на телефоне и планшете, но одно и то же приложение

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

Например, у телефона 2 кнопки на главном экране, а у планшета будет 5, потому что мы хотели бы использовать то пространство, которое у нас есть. Я знаю, что могу определять разные макеты, в зависимости от dpi, но как мне обрабатывать макеты в Activiies? Я думаю, что использование if(sdkVersion >=11) bla..bla... is не будет работать через код дыры и проект дыры! Является ли это ситуацией, когда я должен использовать поддержку нескольких приложений?

прочитанные статьи: http://developer.android.com/guide/practices/screens_support.html

http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources

http://developer.android.com/guide/market/publishing/multiple-apks.html

Я не понимаю, как мне справиться с этой проблемой... пожалуйста, помогите, спасибо


person Karoly    schedule 17.09.2011    source источник


Ответы (1)


Поместите макеты планшета в res/layout-large/. Поместите макеты телефонов в res/layout/. Назовите их одинаково. Ваши действия будут загружать правильные в зависимости от устройства, на котором они работают. Когда вы вызываете findViewById() для получения дополнительных кнопок и видите, что вы получаете null обратно, игнорируйте их.

Вам могут понадобиться дополнительные макеты в таких местах, как res/layout-large-land/ (альбомная ориентация для планшетов), res/layout-xlarge/ (если вы хотите работать с планшетами 10+ дюймов иначе, чем с устройствами в диапазоне 5-9 дюймов), res/layout-small/ (если вы хотите работать с экранами ‹3 дюйма) , так далее.

person CommonsWare    schedule 17.09.2011
comment
Привет CommonsWare! Спасибо за ваш комментарий, но когда вы вызываете findViewById() для получения дополнительных кнопок и видите, что вы получаете нуль, игнорируйте их. это то, что я хотел бы уволить. потому что мы собираемся начать большой проект с множеством действий, которые вы знаете, и всегда выполняя if(findViewById(R.id.btn7)==null) делает код нечитаемым так легко.... Я ищу элегантное решение :) - person Karoly; 17.09.2011
comment
@Karoly: и всегда выполнение if(findViewById(R.id.btn7)==null) так легко делает код нечитаемым - что всегда? Используйте одну из тех причудливых вещей Java, называемых элементами данных, для хранения виджета или boolean. Или реорганизуйте свой пользовательский интерфейс, чтобы использовать фрагменты, чтобы на телефонах вы использовали один фрагмент для каждого действия, а ваше основное действие загружало макет, который выводит два фрагмента. - person CommonsWare; 18.09.2011
comment
но, как я вижу, fregments поставляется с уровнем API 11. Для планшетов хорошо, но как я могу использовать fregments, если мы хотим запустить приложение на телефонах (2.1,2.2.2.3) и талбет тоже - person Karoly; 18.09.2011
comment
@Karoly: Фрагменты являются частью библиотеки совместимости с Android и поэтому доступны для Android 1.6. - person CommonsWare; 18.09.2011