今天下午写了个百分比布局小Demo,虽然只有支持PercentRelativeLayout和 PercentFrameLayout,但是我们也可以自己写个PercentLinearlayout。可以去看看鸿洋大神的博客http://blog.csdn.net/lmj623565791/article/details/46767825,他讲的比较详细。
几个小问题注意下就行,使用百分比布局需添加:
xmlns:app="http://schemas.android.com/apk/res-auto"
还有就是控件的宽高要给:
android:layout_width="0dp" android:layout_height="0dp"引用库里的就是没有PercentLinearlayout,那我们自己写一个,其实就是仿照PercentRelativeLayout写的:
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); } } }