1. 程式人生 > >自定義View,流式佈局,

自定義View,流式佈局,

 

寫的比較基礎, 備忘使用。

public class FlowLayout extends ViewGroup {


    public FlowLayout(Context context) {
        this(context, null);
    }

    public FlowLayout(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public FlowLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        //測量所有子View的總高度
        measureChildren(0, 0);

        //當前行前面所有控制元件寬度
        int allWidth = 0;
        //當前行前面所有控制元件高度
        int allHeight = 0;

        //遍歷所有子View
        for (int i = 0; i < getChildCount(); i++) {
            //拿到子控制元件
            View view = getChildAt(i);

            //先判斷是否換行, 如果控制元件在一行放不下,便放入下一行
            if (allWidth + view.getMeasuredWidth() >= getMeasuredWidth()) {
                //換行
                //換行的時候,前面的總寬度重新設定為0,寬度加上一行的高度
                allWidth = 0;
                //高度加上之前的高度
                allHeight += view.getMeasuredHeight();
            }

            //換行時變高度, 不換行時只變寬度
            //設定前後左右的控制元件的位置 , 屬性先後順序是:左上右下
            view.layout(allWidth,
                    allHeight,
                   allWidth + view.getMeasuredWidth(),
                   allHeight + view.getMeasuredHeight());

            //之前總寬度加上這次的寬度, 等於最新的寬度
            allWidth += view.getMeasuredWidth();
        }


    }
}

 

如果寫的死資料,可以在xml檔案中自定義控制元件新增Textview ,

可以使用shape繪製一個圓角邊框, 使用backbackground 引用圓角

刪除所有檢視  group的方法,  removeViews;

 

select.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                TextView  textView = new TextView(HomePageActivity.this);
                //設定輸出框的值
                String s = home_edit.getText().toString();
                textView.setText(s);
                //設定背景
                textView.setBackgroundResource(R.drawable.bg);
                ViewGroup.MarginLayoutParams layoutParams = new ViewGroup.MarginLayoutParams(ViewGroup.MarginLayoutParams.WRAP_CONTENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT);
                //設定padding
                textView.setPadding(10, 0, 10, 10);
                //設定margins
                layoutParams.setMargins(10, 10, 10, 10);
                textView.setLayoutParams(layoutParams);

                flow_layout.addView(textView);
            }
        });