Android_自定义view设置控件位置

来源:互联网 发布:软件专利范文 编辑:程序博客网 时间:2024/05/23 01:16

一:布局

<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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"    tools:context="activity.example.com.baikaijun20171104.FlowActivity">        <activity.example.com.baikaijun20171104.view.MyView        android:layout_width="match_parent"        android:layout_height="wrap_content">        <TextView            android:background="#619EA0"            android:layout_width="120dp"            android:layout_height="50dp" />        <TextView            android:background="#7561A0"            android:layout_width="120dp"            android:layout_height="50dp" />        <TextView            android:background="#9FA061"            android:layout_width="120dp"            android:layout_height="50dp" />    </activity.example.com.baikaijun20171104.view.MyView></RelativeLayout>

二:创建类,继承ViewGroup

public class MyView extends ViewGroup{    public MyView(Context context) {        this(context,null);    }    public MyView(Context context, AttributeSet attrs) {        this(context, attrs,0);    }    public MyView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        //测量自己子类控件的宽度        measureChildren(widthMeasureSpec,heightMeasureSpec);    }    @Override    protected void onLayout(boolean b, int i, int i1, int i2, int i3) {        //获取子控件的数量        int count = getChildCount();        //设置默认起始值        int startWidth = 0;        int startHeight = 0;        //循环遍历子控件        for (int j = 0; j < count; j++) {            //取出每一条子视图            View v = getChildAt(j);//            注释部分可实现流式布局,内容满之后换行//            if(startWidth+v.getMeasuredWidth()>getMeasuredWidth())//            {//                startHeight+=v.getMeasuredHeight();//                startWidth = 0;//            }            //给每一个子视图设置定位            v.layout(startWidth,startHeight,startWidth+v.getMeasuredWidth(),startHeight+v.getMeasuredHeight());            startWidth+=v.getMeasuredWidth();            startHeight+=v.getMeasuredHeight();        }    }}



原创粉丝点击