1.首先导入相应的库。
2.库中提供了PercentRelativeLayout和PercentFrameLayout2中布局
- heightPercent:百分比表示高度
- widthPercent:百分比表示宽度
- marginBottomPercent:百分比表示底部的间隔
- marginEndPercent:百分比表示距离最后一个View之间的间隔
- marginLeftPercent:百分比表示左边的间隔
- marginPercent:百分比表示View之间的间隔
- marginRightPercent:百分比表示右边的间隔
- marginStartPercent:百分比表示距离第一个View之间的间隔
- marginTopPercent:百分比表示顶部的间隔
3.<android.support.percent.PercentRelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.tcl.navigator.myapplication.MainActivity">
<TextView
android:id="@+id/tv"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/darker_gray"
android:text="heightPercent30%_widthPercent50%"
app:layout_heightPercent="30%"
app:layout_widthPercent="50%"/>
<TextView
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_toRightOf="@id/tv"
android:background="@android:color/holo_blue_light"
android:text="heightPercent40%_widthPercent50%"
app:layout_heightPercent="40%"
app:layout_widthPercent="50%"/>
<TextView
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_below="@id/tv"
android:background="@android:color/holo_green_dark"
android:text="heightPercent10%_widthPercent50%"
app:layout_heightPercent="10%"
app:layout_widthPercent="50%"/>
</android.support.percent.PercentRelativeLayout>
4.运行效果
5.Goggle没有提供PercentLinearLayout,但是我们可以根据PercentLayoutHelper自定义一个PercentLinearLayout。
public class PercentLinearLayout extends LinearLayout
{
private PercentLayoutHelper mPercentLayoutHelper;
public PercentLinearLayout(Context context, AttributeSet attrs)
{
super(context, attrs);
mPercentLayoutHelper = new PercentLayoutHelper(this);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
mPercentLayoutHelper.adjustChildren(widthMeasureSpec, heightMeasureSpec);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mPercentLayoutHelper.handleMeasuredStateTooSmall())
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b)
{
super.onLayout(changed, l, t, r, b);
mPercentLayoutHelper.restoreOriginalParams();
}
@Override
public LayoutParams generateLayoutParams(AttributeSet attrs)
{
return new LayoutParams(getContext(), attrs);
}
public static class LayoutParams extends LinearLayout.LayoutParams
implements PercentLayoutHelper.PercentLayoutParams
{
private PercentLayoutHelper.PercentLayoutInfo mPercentLayoutInfo;
public LayoutParams(Context c, AttributeSet attrs)
{
super(c, attrs);
mPercentLayoutInfo = PercentLayoutHelper.getPercentLayoutInfo(c, attrs);
}
@Override
public PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo()
{
return mPercentLayoutInfo;
}
@Override
protected void setBaseAttributes(TypedArray a, int widthAttr, int heightAttr)
{
PercentLayoutHelper.fetchWidthAndHeight(this, a, widthAttr, heightAttr);
}
public LayoutParams(int width, int height) {
super(width, height);
}
public LayoutParams(ViewGroup.LayoutParams source) {
super(source);
}
public LayoutParams(MarginLayoutParams source) {
super(source);
}
}
}