Jon*_*ona 13 android android-layout
我非常擅长基于ViewGroup创建复杂的自定义布局.我唯一缺少的是能够创建自定义LayoutParams.我真的需要能够获得边距,为什么不创建其他额外的参数传递给父母.
如何创建自定义LayoutParam并通过xml使用它?我尝试使用LinearLayout.LayoutParam,但它显然崩溃,因为父级不是LinearLayout.如何在自定义布局上使用LayoutParams?
更新:
截至目前,我坚持使用FrameLayout并重写onMeasure和onLayout函数来自行完成布局.这确实提供了FrameLayout.LayoutParams.我猜测孩子们必须支持自定义LayoutParam?
Joe*_*ren 19
在自定义布局中,创建一个扩展的嵌套类ViewGroup.LayoutParams
.然后覆盖一些方法(在我的例子中所有必需的方法).这是我的一个自定义布局的精简版:
public class MyLayout extends ViewGroup {
public MyLayout(Context context) {
}
public MyLayout(Context context, AttributeSet attrs) {
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
}
@Override
protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
return p instanceof LayoutParams;
}
@Override
protected LayoutParams generateDefaultLayoutParams() {
return new LayoutParams();
}
@Override
public LayoutParams generateLayoutParams(AttributeSet attrs) {
return new LayoutParams(getContext(), attrs);
}
@Override
protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
return generateDefaultLayoutParams(); // TODO Change this?
}
public static class LayoutParams extends ViewGroup.LayoutParams {
public LayoutParams() {
}
public LayoutParams(int width, int height) {
}
public LayoutParams(Context context, AttributeSet attrs) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
进一步说明:如何创建FlowLayout(感谢链接Luksprog!)
归档时间: |
|
查看次数: |
5622 次 |
最近记录: |