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);
}
}