java.lang.Object | |
↳ | android.support.percent.PercentLayoutHelper |
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:
ViewGroup.LayoutParams
subclass in your ViewGroup that implements
PercentLayoutHelper.PercentLayoutParams
.
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.
setBaseAttributes(TypedArray, int, int)
with a single line implementation PercentLayoutHelper.fetchWidthAndHeight(this, a,
widthAttr, heightAttr);
generateLayoutParams(AttributeSet)
to return
your LayoutParams.
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(); }
Nested Classes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
PercentLayoutHelper.PercentLayoutInfo | Container for information about percentage dimensions and margins. | ||||||||||
PercentLayoutHelper.PercentLayoutParams |
If a layout wants to support percentage based dimensions and use this helper class, its
LayoutParams subclass must implement this interface.
|
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Iterates over children and changes their width and height to one calculated from percentage
values.
| |||||||||||
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.
| |||||||||||
Constructs a PercentLayoutInfo from attributes associated with a View.
| |||||||||||
Iterates over children and checks if any of them would like to get more space than it
received through the percentage dimension.
| |||||||||||
Iterates over children and restores their original dimensions that were changed for
percentage values.
|
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
java.lang.Object
|
Iterates over children and changes their width and height to one calculated from percentage values.
widthMeasureSpec | Width MeasureSpec of the parent ViewGroup. |
---|---|
heightMeasureSpec | Height MeasureSpec of the parent ViewGroup. |
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.
Constructs a PercentLayoutInfo from attributes associated with a View. Call this method from
LayoutParams(Context c, AttributeSet attrs)
constructor.
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
.
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)
.