PercentLayoutHelper

public class PercentLayoutHelper
extends Object

java.lang.Object
   ↳ androidx.percentlayout.widget.PercentLayoutHelper


This class is deprecated.
consider using ConstraintLayout and associated layouts instead. The following shows how to replicate the functionality of percentage layouts with a ConstraintLayout. The Guidelines are used to define each percentage break point, and then a Button view is stretched to fill the gap:

 <androidx.constraintlayout.widget.ConstraintLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
         android:layout_width="match_parent"
         android:layout_height="match_parent">

     <androidx.constraintlayout.widget.Guideline
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:id="@+id/left_guideline"
         app:layout_constraintGuide_percent=".15"
         android:orientation="vertical"/>

     <androidx.constraintlayout.widget.Guideline
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:id="@+id/right_guideline"
         app:layout_constraintGuide_percent=".85"
         android:orientation="vertical"/>

     <androidx.constraintlayout.widget.Guideline
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:id="@+id/top_guideline"
         app:layout_constraintGuide_percent=".15"
         android:orientation="horizontal"/>

     <androidx.constraintlayout.widget.Guideline
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:id="@+id/bottom_guideline"
         app:layout_constraintGuide_percent=".85"
         android:orientation="horizontal"/>

     <Button
         android:text="Button"
         android:layout_width="0dp"
         android:layout_height="0dp"
         android:id="@+id/button"
         app:layout_constraintLeft_toLeftOf="@+id/left_guideline"
         app:layout_constraintRight_toRightOf="@+id/right_guideline"
         app:layout_constraintTop_toTopOf="@+id/top_guideline"
         app:layout_constraintBottom_toBottomOf="@+id/bottom_guideline" />

 </androidx.constraintlayout.widget.ConstraintLayout>

  

Helper for layouts that want to support percentage based dimensions.

This class collects utility methods that are involved in extracting percentage based dimension attributes and applying them to ViewGroup's children. If you would like to implement a layout that supports percentage based dimensions, you need to take several steps:

  1. You need a ViewGroup.LayoutParams subclass in your ViewGroup that implements PercentLayoutHelper.PercentLayoutParams.
  2. In your LayoutParams(Context c, AttributeSet attrs) constructor create an instance of PercentLayoutHelper.PercentLayoutInfo by calling getPercentLayoutInfo(Context, AttributeSet). Return this object from public PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo() method that you implemented for PercentLayoutHelper.PercentLayoutParams interface.
  3. Override ViewGroup.LayoutParams.setBaseAttributes(TypedArray, int, int) with a single line implementation PercentLayoutHelper.fetchWidthAndHeight(this, a, widthAttr, heightAttr);
  4. In your ViewGroup override ViewGroup.generateLayoutParams(AttributeSet) to return your LayoutParams.
  5. In your View.onMeasure(int, int) override, you need to implement following pattern:
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         mHelper.adjustChildren(widthMeasureSpec, heightMeasureSpec);
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
         if (mHelper.handleMeasuredStateTooSmall()) {
             super.onMeasure(widthMeasureSpec, heightMeasureSpec);
         }
     }
     
  6. In your ViewGroup.onLayout(boolean, int, int, int, int) override, you need to implement following pattern:
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
         super.onLayout(changed, left, top, right, bottom);
         mHelper.restoreOriginalParams();
     }
     

Summary

Nested classes

class PercentLayoutHelper.PercentLayoutInfo

This class is deprecated. use ConstraintLayout and Guidelines for layout support.  

interface PercentLayoutHelper.PercentLayoutParams

This interface is deprecated. this class is deprecated along with its parent class.  

Public constructors

PercentLayoutHelper(ViewGroup host)

Public methods

void adjustChildren(int widthMeasureSpec, int heightMeasureSpec)

Iterates over children and changes their width and height to one calculated from percentage values.

static void fetchWidthAndHeight(ViewGroup.LayoutParams params, TypedArray array, int widthAttr, int heightAttr)

Helper method to be called from ViewGroup.LayoutParams.setBaseAttributes(TypedArray, int, int) override that reads layout_width and layout_height attribute values without throwing an exception if they aren't present.

static PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo(Context context, AttributeSet attrs)

Constructs a PercentLayoutInfo from attributes associated with a View.

boolean handleMeasuredStateTooSmall()

Iterates over children and checks if any of them would like to get more space than it received through the percentage dimension.

void restoreOriginalParams()

Iterates over children and restores their original dimensions that were changed for percentage values.

Inherited methods

Public constructors

PercentLayoutHelper

public PercentLayoutHelper (ViewGroup host)

Parameters
host ViewGroup

Public methods

adjustChildren

public void adjustChildren (int widthMeasureSpec, 
                int heightMeasureSpec)

Iterates over children and changes their width and height to one calculated from percentage values.

Parameters
widthMeasureSpec int: Width MeasureSpec of the parent ViewGroup.

heightMeasureSpec int: Height MeasureSpec of the parent ViewGroup.

fetchWidthAndHeight

public static void fetchWidthAndHeight (ViewGroup.LayoutParams params, 
                TypedArray array, 
                int widthAttr, 
                int heightAttr)

Helper method to be called from ViewGroup.LayoutParams.setBaseAttributes(TypedArray, int, int) override that reads layout_width and layout_height attribute values without throwing an exception if they aren't present.

Parameters
params ViewGroup.LayoutParams

array TypedArray

widthAttr int

heightAttr int

getPercentLayoutInfo

public static PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo (Context context, 
                AttributeSet attrs)

Constructs a PercentLayoutInfo from attributes associated with a View. Call this method from LayoutParams(Context c, AttributeSet attrs) constructor.

Parameters