流式布局 实现搜索框

163 阅读1分钟

自义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) { measureChildren(0,0); int totalWidth = 0; int totalHeight = 0; for (int i = 0; i < getChildCount(); i++) { View view = getChildAt(i); if (totalWidth + view.getMeasuredWidth() >= getMeasuredWidth()) { totalWidth = 0; totalHeight += view.getMeasuredHeight(); } view.layout( totalWidth, totalHeight, totalWidth + view.getMeasuredWidth(), totalHeight + view.getMeasuredHeight()); totalWidth += view.getMeasuredHeight(); } }}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

MainActivity代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText et_text; private Button btn_add; private Button btn_decrease; private FlowLayout flow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { et_text = (EditText) findViewById(R.id.et_text); btn_add = (Button) findViewById(R.id.btn_add); btn_decrease = (Button) findViewById(R.id.btn_decrease); flow = (FlowLayout) findViewById(R.id.flow); btn_add.setOnClickListener(this); btn_decrease.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_add: addHistory(); break; case R.id.btn_decrease: flow.removeAllViews(); break; } } private void addHistory() { TextView txt = new TextView(this); String s = et_text.getText().toString(); if (!TextUtils.isEmpty(s)) { txt.setText("" + s);// Toast.makeText(this,""+txt.getText(),Toast.LENGTH_LONG).show(); txt.setPadding(15, 15, 15, 15); flow.addView(txt); } } private void submit() { // validate String text = et_text.getText().toString().trim(); if (TextUtils.isEmpty(text)) { Toast.makeText(this, "text不能为空", Toast.LENGTH_SHORT).show(); return; } }}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

布局中直接写自己的自定义控件即可