自定義View,流式佈局,
阿新 • • 發佈:2018-11-02
寫的比較基礎, 備忘使用。
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); } });