package com.example.dell.zhoukaomoni; import android.content.Context; import android.util.DisplayMetrics; /** * Created by DELL on 2018/6/9. */ public class AppUtils { public static int screenWidth(Context context){ DisplayMetrics metrics = context.getResources().getDisplayMetrics(); return metrics.widthPixels; }
}
package com.example.dell.zhoukaomoni; import android.content.Context; import android.graphics.Color; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; /** * Created by DELL on 2018/6/9. */ public class MyTitle extends LinearLayout implements View.OnClickListener { private TextView title; private Button add; int context=0; public MyTitle(Context context) { super(context); initView(context,null); } public MyTitle(Context context, @Nullable AttributeSet attrs) { super(context, attrs); initView(context,attrs); } private void initView(Context context, AttributeSet attrs) { View view=inflate(context,R.layout.title_view,this); title = view.findViewById(R.id.tv_title); add = view.findViewById(R.id.btn_add); title.setOnClickListener(this); add.setOnClickListener(this); if (attrs==null){ return; } } public MyTitle(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public void onClick(View v) { String content=""; if (v.equals(title)){ }else if (v.equals(add)){ context++; TextView textView = new TextView(v.getContext()); int width=AppUtils.screenWidth(v.getContext()); MyView cc = findViewById(R.id.cc); textView.setWidth(width/2); textView.setHeight(100); textView.setText(""+context); textView.setGravity(Gravity.CENTER); textView.setTextColor(Color.BLUE); textView.setBackgroundColor(Color.YELLOW); cc.addView(textView); } } }
package com.example.dell.zhoukaomoni; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; /** * Created by DELL on 2018/6/9. */ public class MyView extends ViewGroup { public MyView(Context context) { super(context); } 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); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int width = 0; int height = 0; int linewidth = 0; int lineheight = 0; int totalheight = 0; View childView; int childwidth = 0; int childheight = 0; for (int i=0; i<getChildCount(); i++ ){ childView = getChildAt(i); childwidth = childView.getMeasuredWidth(); // if (childwidth>widthSize){ // // } childheight=childView.getMeasuredHeight(); if (linewidth+childwidth>widthSize){ width = widthSize; linewidth=childwidth; totalheight+= lineheight = Math.max(lineheight,childheight); }else{ linewidth += childwidth; totalheight+= lineheight = Math.max(lineheight,childheight); width = Math.max(width,linewidth); } if (i== getChildCount()-1){ totalheight += lineheight; height = totalheight; } } width = widthMode == MeasureSpec.EXACTLY ? widthSize:width; height = heightMode == MeasureSpec.EXACTLY ? heightSize:height; setMeasuredDimension(width,height); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int linewidth = 0; int lineheight = 0; int totalheight = 0; View childView; int childwidth = 0; int childheight = 0; for(int i=0;i<getChildCount();i++){ childView = getChildAt(i); childwidth = childView.getMeasuredWidth(); childheight = childView.getMeasuredHeight(); if (linewidth + childwidth>getMeasuredWidth()){ LayoutChildView(childView, 0,totalheight, childwidth, totalheight + childheight); linewidth=childwidth; totalheight+=childheight; }else{ LayoutChildView(childView, linewidth,totalheight,linewidth + childwidth, totalheight + childheight); totalheight+=childheight; linewidth+=childwidth; } } } private void LayoutChildView(View childView, int l, int t, int r, int b) { childView.layout(l,t,r,b); } }