自定义流式布局

public class FlayLinearout extends LinearLayout {

    private int mWidthPixels;
    private int mHeightPixels;

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

    public FlayLinearout(Context context, AttributeSet attrs) {
        this(context, attrs, -1);
    }

    public FlayLinearout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        //设置排列模式
        setOrientation(VERTICAL);
        //获取屏幕信息
        DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
        mWidthPixels = displayMetrics.widthPixels;
        mHeightPixels = displayMetrics.heightPixels;

    }
    //加载布局
    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
    }


    //初始化布局
    private LinearLayout initHor() {
        LinearLayout linearLayout = new LinearLayout(getContext());
        linearLayout.setOrientation(HORIZONTAL);
        //创建属性
        LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        this.addView(linearLayout, layoutParams);   //添加布局
        return linearLayout;
    }

    private TextView inittext() {
        TextView textView = new TextView(getContext());
        textView.setTextSize(20);
        textView.setTextColor(Color.RED);
        return textView;
    }

    //设置外部添加数据的方法
    public void setAdapter(String[] data) {
        LinearLayout linearLayout = initHor();
        for (int i = 0; i < data.length; i++) {
            String datum = data[i];
            int childCount = linearLayout.getChildCount();
            //测量每行的宽度
            int totalWidth = 0;
            for (int j = 0; j < childCount; j++) {
                //得到子布局
                TextView childAt = (TextView) linearLayout.getChildAt(j);
                //设置大小
                childAt.measure(getMeasuredWidth(), getMeasuredHeight());
                //得到宽
                int width = childAt.getMeasuredWidth();
                //获取父布局
                LinearLayout.LayoutParams layoutParams = (LayoutParams) childAt.getLayoutParams();

                //得到总宽度
                totalWidth += width + layoutParams.leftMargin;
            }

            TextView textView = inittext();
            textView.setText(datum);
            //设置文字的宽高
            LinearLayout.LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            //设置中立方向  设置宽  高 地下
            params.gravity=Gravity.CENTER;
            params.leftMargin = 10;
            params.topMargin = 10;
            params.bottomMargin = 10;

            //设置TextView的宽高
            textView.measure(getMeasuredWidth(), getMeasuredHeight());
            int measuredWidth = textView.getMeasuredWidth();
            //通过判断总宽度  小于创建下一行  大于 继续添加
            if (mWidthPixels >= totalWidth + measuredWidth + params.leftMargin) {
                linearLayout.addView(textView, params);

            } else {
                linearLayout = initHor();
                linearLayout.addView(textView, params);
            }
        }

    }

}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">

  <android.support.v7.widget.Toolbar
      android:id="@+id/toolbar"
      android:layout_width="match_parent"
      android:layout_height="wrap_content">
    <TextView
        android:text="我的"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

  </android.support.v7.widget.Toolbar>

  <com.liu.liushibuju.FlayLinearOutA
      android:id="@+id/fll"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"></com.liu.liushibuju.FlayLinearOutA>
</LinearLayout>

public class MainActivity extends AppCompatActivity {
    private String[] desc = new String[]{"移动", "好好你的", "好好学习", "天天向上", "好好学习", "天天向上", "我要疯了",
            "学不会啊,怎么办呢", "感觉天书一样", "神啊,救救我吧!!!!!"};


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar =findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        FlayLinearOutA flayLinearOutA = findViewById(R.id.fll);
        flayLinearOutA.setAdapter(desc);

        toolbar.setNavigationIcon(R.mipmap.ic_launcher);

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);

        return true;
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public void onOptionsMenuClosed(Menu menu) {
        super.onOptionsMenuClosed(menu);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值