Android: Вопрос о приложениях, не зависящих от размера / разрешения?

#android #layout #user-interface #screen

#Android #макет #пользовательский интерфейс #экран

Вопрос:

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

Итак, в принципе, если я подведу итог тому, что это руководство говорит нам делать:

  • Мы должны создать несколько ресурсов макета для каждой «группы размеров» и «группы плотности» устройств, с которыми вы хотите, чтобы ваше приложение было совместимо.
  • Мы должны использовать RelativeLayout или FrameLayout вместо AbsoluteLayout
  • Мы должны использовать dp размеры вместо px dimensions, чтобы избавиться от проблемы разницы в плотности.

ОК. Это имеет смысл.

Теперь, вот мои вопросы (заранее прошу прощения за их глупость):

  • Почему я должен создавать разные ресурсы макета для разных, density groups если я использую Density Independent Pixels (dp) размеры?
  • Я полагаю, что смысл наличия разных наборов ресурсов для разных размеров экрана заключается в том, что вы можете захотеть, чтобы макет вашего приложения выглядел по-разному на маленьком и большом устройстве, а не имел точно такой же макет с разными размерами, верно? По сути, это означает, что если я просто хочу приложение, которое выглядит одинаково на всех устройствах (просто сжимается / расширяется в соответствии с размером экрана), мне нужно определить только один набор ресурсов, правильно?
  • Если я хочу создать действительно простой макет, содержащий всего две кнопки, где каждая кнопка занимает 50% ширины экрана, как мне это сделать, просто используя dp размеры?

Спасибо и еще раз извините за повторное рассмотрение этой темы…

Ответ №1:

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

Если вы хотите получить 2 кнопки одинакового размера, просто используйте

 android:layout_width="fill_parent"
android:layout_weight="1"
  

для обеих кнопок и поместите их в контейнер линейного макета.

редактировать (полный код, даст две кнопки рядом):

 <LinearLayout android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:orientation="horizontal">
    <Button 
        android:layout_width="fill_parent" android:layout_height="wrap_content" 
        android:layout_weight="1"
        android:text="@string/b1" android:onClick="btn1" />
    <Button 
        android:layout_width="fill_parent" android:layout_height="wrap_content" 
        android:layout_weight="1"
        android:text="@string/b2" android:onClick="btn2" />
</LinearLayout>
  

Комментарии:

1. Просто для пояснения: без Android:layout_weight =»1″ каждая кнопка занимала бы все пространство, а android: layout_weight =»1″ позволяет им уменьшаться на одно и то же значение, чтобы соответствовать размеру экрана (или макета). Вы также могли бы использовать android: layout_weight= «2» для одного и android: layout_weight = «3» для второго, отдавая 3/5 (= 60%) экрана первой кнопке.

2. Спасибо за ваш ответ. Извините, но я не понимаю, как работает layout_weight… В вашем примере кнопки будут располагаться рядом или одна над другой. Работает ли это только внутри линейного макета или любого типа макета? Спасибо.

3. макет должен быть линейным макетом, но может находиться внутри любого другого контейнера макета (см. Редактирование). Я предполагаю, что TableLayout с fill_parent в layout и buttons может дать тот же результат, например, когда вы хотите иметь кнопки 4×4.