belongs to Maven artifact com.android.support:percent:28.0.0-alpha1
Deprecated since version 26.1.0
PercentLayoutHelper
public
class
PercentLayoutHelper
extends Object
java.lang.Object | |
↳ | android.support.percent.PercentLayoutHelper |
This class was deprecated
in API level 26.1.0.
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:
<android.support.constraint.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_h<eight="match_parent"> android.support.constraint.Guideline android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/left_guideline" app:layout_constr<aintGuide_percent=".15" android:orientation="vertical"/> android.support.constraint.Guideline android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="<;@+id/right_guideline" app:layout_constraintGuide_percent=".85" android:orientation="vertical"/> android.support.constraint.Guideline android:layout_width="wrap_content" android:layout_hei<ght="wrap_content" android:id="@+id/top_guideline" app:layout_constraintGuide_percent=".15" android:orientation="horizontal"/> android.support.constraint.Guideline android:layout_width=&<quot;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=&<quot;@+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" /> /android.support.constraint.ConstraintLayout>
- Helpe
r
for layouts that want to support percentage based dimensions. This
class collects utility methods that ar- e
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: You need a ViewGroup.LayoutParams subclass in your ViewGroup that implementsPercentLayoutHelper.PercentLayoutParam
s. In your- LayoutParam
s
(Context c, AttributeSet attrs) constructor create an instance of PercentLayoutHelper
.PercentLayoutInfo by calling getPercentLayoutInfo(Context, At- tributeSet
). Return this object
from public PercentLayoutHelper.PercentLayoutInfo getPercentL- ayoutInfo
() method that you
implemented for PercentLayoutHelper.PercentLayoutParamsinterface. Override setBaseAttributes(TypedArray, int, int) with a single line implementation PercentLayoutHelper.fetchWidthAndHeight(this, a, widthAttr, heightAttr); In your ViewGroup override generateLayoutParams(AttributeSet) to return your LayoutParams. In your 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); } }
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 was deprecated in API level 26.1.0. use ConstraintLayout and Guidelines for layout support. |
interface |
PercentLayoutHelper.PercentLayoutParams
This interface was deprecated in API level 26.1.0. 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 |
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 | |
---|---|
![]()
java.lang.Object
|
Public constructors
PercentLayoutHelper
PercentLayoutHelper (ViewGroup host)
Parameters | |
---|---|
host |
ViewGroup |
Public methods
adjustChildren
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
void fetchWidthAndHeight (ViewGroup.LayoutParams params, TypedArray array, int widthAttr, int heightAttr)
Helper method to be called from 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
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 | |
---|---|
context |
Context |
attrs |
AttributeSet |
Returns | |
---|---|
PercentLayoutHelper.PercentLayoutInfo |
handleMeasuredStateTooSmall
boolean handleMeasuredStateTooSmall ()
Iterates over children and checks if any of them would like to get more space than it
received through the percentage dimension.
If you are building a layout that supports percentage dimensions you are encouraged to take
advantage of this method. The developer should be able to specify that a child should be
remeasured by adding normal dimension attribute with wrap_content
value. For example
he might specify child's attributes as app:layout_widthPercent="60%p"
and
android:layout_width="wrap_content"
. In this case if the child receives too little
space, it will be remeasured with width set to WRAP_CONTENT
.
Returns | |
---|---|
boolean |
True if the measure phase needs to be rerun because one of the children would like to receive more space. |
restoreOriginalParams
void restoreOriginalParams ()
Iterates over children and restores their original dimensions that were changed for
percentage values. Calling this method only makes sense if you previously called
adjustChildren(int, int)
.
Interfaces
Classes
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2025-02-10 UTC.