Маржи макета для Android в процентах

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

Является ли это возможным ?

Вот демо, что я хочу .. Введите описание изображения здесь

И вот что я пробовал и не работает

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:weightSum="10" > <Thumbnail android:id="@+id/thumb1" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="4" /> <Thumbnail android:id="@+id/thumb2" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="4" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:weightSum="10" > <Thumbnail android:id="@+id/thumb3" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="4" > </Thumbnail> <Thumbnail android:id="@+id/thumb4" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="4" /> </LinearLayout> 

Спасибо за вашу помощь

Вы можете иметь невидимый View s в вашем LinearLayout s как разделители и использовать механизм layout_weight , чтобы назначить их относительный размер.

Пример:

 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1"> <Thumbnail android:id="@+id/thumb1" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="4" /> <View android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="2" android:visibility="invisible"/> <Thumbnail android:id="@+id/thumb2" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="4" /> </LinearLayout> 

Добавлено 1 августа 2017 года:

Два макета из этого ответа теперь устарели, но есть описание, предоставляемое там, как получить ту же функциональность с CoordinatorLayout . Благодаря dpg для указания этого.

Если вы планируете использовать проценты с ресурсами, этот ответ может быть полезен.


Старый ответ:

Теперь есть лучший способ, который вышел с поддержкой библиотеки версии 23.0.0 (о времени, правда?). Теперь вы можете использовать PercentFrameLayout или PercentRelativeLayout . Оба они имеют следующие атрибуты:

  • layout_widthPercent
  • layout_heightPercent
  • layout_marginPercent
  • layout_marginLeftPercent
  • layout_marginTopPercent
  • layout_marginRightPercent
  • layout_marginBottomPercent
  • layout_marginStartPercent
  • layout_marginEndPercent

Вы также можете взглянуть на PercentLayoutHelper.PercentLayoutParams

Глядя на ваше изображение, вы можете сделать то, что вы могли бы сделать, использовать относительный макет и поместить в него линейный макет. Вы также можете использовать weightSum, если хотите, чтобы изображения отображались правильно.

 <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="5dp" android:layout_marginLeft="5dp" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:orientation="vertical" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:orientation="vertical" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </RelativeLayout>