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_height="match_parent"> <android.support.constraint.Guideline android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/left_guideline" app:layout_constraintGuide_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_height="wrap_content" android:id="@+id/top_guideline" app:layout_constraintGuide_percent=".15" android:orientation="horizontal"/> <android.support.constraint.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" /> </android.support.constraint.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:
- You need a
ViewGroup.LayoutParams
subclass in your ViewGroup that implementsPercentLayoutHelper.PercentLayoutParams
.- In your
LayoutParams(Context c, AttributeSet attrs)
constructor create an instance ofPercentLayoutHelper.PercentLayoutInfo
by callinggetPercentLayoutInfo(Context, AttributeSet)
. Return this object frompublic PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo()
method that you implemented forPercentLayoutHelper.PercentLayoutParams
interface.- Override
setBaseAttributes(TypedArray, int, int)
with a single line implementationPercentLayoutHelper.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);
}
}
- In your
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
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.
Public constructors
PercentLayoutHelper
added in version 24.1.0 PercentLayoutHelper (ViewGroup host)
Parameters host
ViewGroup
Public methods
adjustChildren
added in version 24.1.0 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
added in version 24.1.0 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
added in version 24.1.0 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
handleMeasuredStateTooSmall
added in version 24.1.0 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 asapp:layout_widthPercent="60%p"
andandroid:layout_width="wrap_content"
. In this case if the child receives too little space, it will be remeasured with width set toWRAP_CONTENT
.
Returns boolean
True if the measure phase needs to be rerun because one of the children would like to receive more space. restoreOriginalParams
added in version 24.1.0 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