Подход универсального приложения для Android

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

Библиотека поддержки

Фрагменты

Моя цель - создать разные интерфейсы для планшета и телефона в одном приложении.

я уже читалГотовим ваше приложение для Jelly Bean и Nexus 7 , В этой статье упоминается, что

res/layout/activity_home.xml

To take advantage of the extra space on the 7” screen you might provide an alternative layout:

res/layout-sw600dp/activity_home.xml

The sw600dp qualifier declares that these resources are for devices that have a screen with at least 600dp available on its smallest side. 

    Furthermore you might even provide a different layout for 10” tablets:

res/layout-sw720dp/activity_home.xml

Это означает, что мы можем использовать разные макеты для разных устройств. Это меня смущает

РЕДАКТИРОВАТЬ 1 :: Сценарий

предполагать

if my phone UI layout contains one-view pager and 

tablet UI layout contain two-view pager  . 

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

РЕДАКТИРОВАТЬ 2: Идея пришла мне в голову, определить, какой тип устройства я использую, например, Tab или телефон.

Определить, является ли устройство смартфоном или планшетом?

Тогда избегайте инициализации виджетов, если приложение - телефон. Есть ли лучший способ, чем этот ??

РЕДАКТИРОВАТЬ 3: Моя поддержка приложений от 2.3 до более высоких версий

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

 edwin21 мая 2013 г., 13:13
@FahadIshaque Пожалуйста, проверьте мои изменения
 Fahad Ishaque21 мая 2013 г., 12:56
Это означает, что мы можем использовать разные макеты для разных устройств. Это смущает меня. Что тебя смущает? Я думаю ты'Мы уже сделали множество исследований.
 Fahad Ishaque21 мая 2013 г., 12:57
Я предпочитаю использовать layout / large (для 5.1-7-дюймового устройства), layout / xlarge (для 10-дюймовых вкладок) и layout нормальный для мобильных телефонов. Мобильные макеты могут быть дополнительно определены с помощью layout / large-xhdpi или ldpi / mdpi / hdpi

Ответы на вопрос(2)

findViewById вернет виджет в случаеприсутствует в макете,null на случай, еслиНет такого виджета. Поэтому, если он возвращает ненулевое значение, вы можете продолжить дальнейшую инициализацию.

 edwin21 мая 2013 г., 13:12
Можете проверить мой EDIT2I '
 Alexander Kulyakhtin21 мая 2013 г., 13:35
мы видели, что иногда они так делают: если вы знаете, что в определенном макете у вас больше виджетов, чем в другом, то вы можете просто проверить наличие одного виджета из этого 'экстра» группа. Если findViewById дает ненулевое значение, это означает, что у вас также будут все остальные ваши дополнительные виджеты.
Решение Вопроса

Когда я сталкиваюсь с проблемой, я создаю следующую структуру.

res/layout
res/layout-sw600dp

затем различать ценности и другие ресурсы,

res/values
res/values-sw600dp
res/values-sw720dp

Вы заметили, что есть толькоодин макет каталог идва значения каталог для указания полей и отступов и других ресурсов. Таким образом, один макет может быть использован для 7 " а также 10 " таблетки. Это мой сценарий, вы также можете определитьмакета sw720dp, Я сделал это из-за сокращения времени компиляции макетов.

У меня также есть разные макеты в телефоне и планшете. Например, у меня естьПосмотреть список на первом экране, затем, когда пользователь нажимает на элемент, он открывает другую активность и естьDetailView для этого. Но в планшете у меня левая сторонаПосмотреть список и правая сторонаDetailView.

Так, чтобы сделать это, взначения / строкиЯ размещаю следующий код,

false

и то же самое для планшетаценности-sw600dp / строки

true

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

boolean isTablet = getResources().getBoolean(R.bool.isTablet);

Теперь у вас есть флаг, указывающий, запущено ли ваше приложение.Телефон или жетаблетки.

Я создал два пакета,

com.phone
com.tablet

тогда согласнофлагЯ направляю свою деятельность наТелефон пакет итаблетка пакет.

Пример,

if(isTablet)
    startActivity(this,TabXYZ.class);
else
    startActivity(this,PhXYZ.class);

И этот подход решил мою проблему.

 Chintan Rathod22 мая 2013 г., 08:57
Я создал свое приложение в 2.3.3 (Ginger Bread). Нет проблем прямо сейчас. И также в игровом магазине.
 Chintan Rathod21 мая 2013 г., 14:58
Но этот функционал будет другим, если экраны будут другими, мой друг. Если функциональность одинакова, то перейдите к фрагменту, это решит вашу проблему, но, хотя у меня проблема с дизайном экрана для телефона и планшета, я использую этот подход.
 Chintan Rathod21 мая 2013 г., 16:28
@edwin, нетВаша проблема еще не решена?
 Chintan Rathod25 мая 2013 г., 05:48
@edwin, если ваша проблема решена с помощью ответа, отметьте принятую, чтобы другие могли получить от нее пользу.
 edwin21 мая 2013 г., 14:24
Итак, вы говорите мне использовать два класса обработчика макета для одной функциональности
 edwin22 мая 2013 г., 06:26
Я обдумал ваш ответ .. Но все еще смотрю, есть ли другой способ справиться с этим
 edwin22 мая 2013 г., 08:52
Ссылаясь на некоторые статьи показывает, что квалификатор sw600dp действителен только для платформ выше Android 3.2. Моё приложение поддерживает с 2.3. каков был твой случай ??
 Chintan Rathod22 мая 2013 г., 09:09
Если вы хотите проверить, скачайте и попробуйтеplay.google.com/store/apps/...

Ваш ответ на вопрос