Save the date! Android Dev Summit is coming to Sunnyvale, CA on Oct 23-24, 2019.


open class PercentFrameLayout : FrameLayout
   ↳ android.view.View
   ↳ android.view.ViewGroup
   ↳ android.widget.FrameLayout
   ↳ androidx.percentlayout.widget.PercentFrameLayout

Subclass of android.widget.FrameLayout that supports percentage based dimensions and margins. You can specify dimension or a margin of child by using attributes with "Percent" suffix. Follow this example:

 <androidx.percentlayout.widget.PercentFrameLayout xmlns:android="" xmlns:app="" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView app:layout_widthPercent="50%" app:layout_heightPercent="50%" app:layout_marginTopPercent="25%" app:layout_marginLeftPercent="25%"/> </androidx.percentlayout.widget.PercentFrameLayout> 
The attributes that you can use are:
  • layout_widthPercent
  • layout_heightPercent
  • layout_marginPercent
  • layout_marginLeftPercent
  • layout_marginTopPercent
  • layout_marginRightPercent
  • layout_marginBottomPercent
  • layout_marginStartPercent
  • layout_marginEndPercent
  • layout_aspectRatio
It is not necessary to specify layout_width/height if you specify layout_widthPercent. However, if you want the view to be able to take up more space than what percentage value permits, you can add layout_width/height="wrap_content". In that case if the percentage size is too small for the View's content, it will be resized using wrap_content rule.

You can also make one dimension be a fraction of the other by setting only width or height and using layout_aspectRatio for the second one to be calculated automatically. For example, if you would like to achieve 16:9 aspect ratio, you can write:

 android:layout_width="300dp" app:layout_aspectRatio="178%" 
This will make the aspect ratio 16:9 (1.78:1) with the width fixed at 300dp and height adjusted accordingly.


Nested classes

Public constructors
<init>(context: Context!)

<init>(context: Context!, attrs: AttributeSet!)

<init>(context: Context!, attrs: AttributeSet!, defStyleAttr: Int)

Public methods
open PercentFrameLayout.LayoutParams!

Protected methods
open Unit
onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int)

open Unit
onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int)

open PercentFrameLayout.LayoutParams!

Public constructors


PercentFrameLayout(context: Context!)


PercentFrameLayout(context: Context!, attrs: AttributeSet!)


PercentFrameLayout(context: Context!, attrs: AttributeSet!, defStyleAttr: Int)

Public methods


open fun generateLayoutParams(attrs: AttributeSet!): PercentFrameLayout.LayoutParams!

Protected methods


protected open fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int): Unit


protected open fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int): Unit


protected open fun generateDefaultLayoutParams(): PercentFrameLayout.LayoutParams!