美文网首页
View自定义属性

View自定义属性

作者: 如梦一般 | 来源:发表于2018-04-24 09:41 被阅读7次

#View自定义属性

##1.在style中声明

```

true

```

##2. class中获取对应的属性声明

```

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.XSView);

isVertical = a.getBoolean(R.styleable.XSView_vertical, true);

```

##3.xml中使用对应的属性

```

android:layout_width="wrap_content"

android:layout_height="wrap_content"

app:vertical="true">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="测试1" />

android:visibility="gone"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="测试2" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="测试3" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="测试4" />

```

#根据声明属性和布局绘制view

##1 继承自ViewGroup

```

public class XSView extends ViewGroup {

private boolean isVertical = false;

public XSView(Context context) {

this(context, null);

}

public XSView(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

public XSView(Context context, AttributeSet attrs, int defStyleAttr) {

this(context, attrs, defStyleAttr, 0);

}

public XSView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {

super(context, attrs, defStyleAttr, defStyleRes);

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.XSView);

isVertical = a.getBoolean(R.styleable.XSView_vertical, true);

}

}

```

##2测量View

```

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

measureChildren(widthMeasureSpec, heightMeasureSpec);

}

```

## 3摆放child view

```

@Override

protected void onLayout(boolean changed, int l, int t, int r, int b) {

int childCount = getChildCount();

int left = 0;

int index = 0;

for (int i = 0; i < childCount; i++) {

View child = getChildAt(i);

if (child.getVisibility() == View.GONE) {

continue;

}

int contentWidth = child.getMeasuredWidth() - child.getPaddingLeft() - child.getPaddingRight();

int contentHeight = child.getMeasuredHeight();

if (isVertical) {

child.layout(left + contentWidth * 0, contentHeight * index, contentWidth * (index + 1), contentHeight * (index + 1));

} else {

child.layout(left + contentWidth * index, 0, contentWidth * (index + 1), contentHeight);

}

index++;

}

}

```

相关文章

  • Android自定义View总结

    Android自定义View总结 [toc] 步骤 自定义View的属性 在View的构造方法获取我们自定义的属性...

  • Android自定义View步骤

    自定义View 的步骤 自定义View属性 在View的构造方法中获得自定义的属性 重写onMesure 重写on...

  • 安卓自定义 View 启航

    先总结下自定义 View 的步骤: 自定义 View 的属性 在 View 的构造方法中获得我们自定义的属性 [重...

  • Android三级联动wheel代码分析(二)

    自定义View的步骤:1、自定义View的属性2、在View的构造方法中获得我们自定义的属性[3、重写onMesu...

  • 自定义View之CustomImageView

    自定义View的步骤: 自定义VIew的属性 在VIew的构造方法中获得我们的属性 重写OnMeasure方法 重...

  • 自定义View

    自定义view的属性 在view的构造方法中获得我们自定义的属性 重写onMeasure 重写onDraw 自定义...

  • 自定义View入门

    一、自定义View的基本步骤概括 自定义View的属性 在View子类的构造方法中获取自定义的属性 重写 onMe...

  • 自定义View的简单流程

    自定义View的步骤 1、自定义属性 1)分析自定义的View中需要哪些的自定义属性,在res/values/at...

  • 哥哥手把手教你安卓自定义view,来了老弟

    先总结下自定义View的步骤:1、自定义View的属性2、在View的构造方法中获得我们自定义的属性[3、重写on...

  • 自定义View之CusetomProgress

    写了一个带进度的进度条 自定义VIew步骤 自定义View的属性 在View的构造方法中获得我们自定义的属性 重写...

网友评论

      本文标题:View自定义属性

      本文链接:https://www.haomeiwen.com/subject/jpydlftx.html