半夜了,直接上代码,注释都在代码里面,其实吧,这个很简单。。。。。
1.MainActivity
package com.example.diaplaycolumnslinearlayout;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
/**
* LinearLayout实现多行多列显示
* @author Administrator
*
*/
public class MainActivity extends Activity {
private LinearLayout mColumnsLinear;
private int column = 4;
private LayoutInflater inflater;
private int index = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化组件
mColumnsLinear = (LinearLayout) findViewById(R.id.columns_linear);
//获取LayoutInflater对象
inflater = LayoutInflater.from(this);
//生成多行多列的线性布局,
displayColumns(13);
}
/**
* 生成多行多列的线性布局
* @param displayNumber 需要生成的个数,这里是需要生成的TextView的总个数
*/
private void displayColumns(int displayNumber) {
//判断
if (displayNumber <= 0) {
return;
}
//判断是否被每行显示的列数整除
boolean boo = false;
//获取列数
int rows = displayNumber / column;
//判断,得到是否被每行显示的列数整除
if (displayNumber % column == 0) {
boo = true;
} else {
boo = false;
}
if (boo) {
//如果能够被整除
for (int i = 0; i < rows; i++) {
createLinear(column);
}
return;
}else{
//如果不能够被整除
for (int i = 0; i < rows; i++) {
createLinear(column);
}
//用%,得到最后剩下的,不足一行的
rows = displayNumber % column;
//创建布局一行的布局
createLinear(rows);
}
}
/**
* 创建每一行显示的线性布局
* @param i 一行显示的textview的个数
*/
private void createLinear(int i) {
//创建线性布局
LinearLayout layout = new LinearLayout(this);
//设置LayoutParams
LinearLayout.LayoutParams lp = new LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
//设置为水平布局
layout.setOrientation(LinearLayout.HORIZONTAL);
//为线性布局这只LayoutParams
layout.setLayoutParams(lp);
//循环添加
for (int j = 0; j < i; j++) {
//获取需要添加的布局文件
View view = inflater.inflate(R.layout.item_column, null, false);
//获取组件
TextView tv = (TextView) view.findViewById(R.id.text);
//设值
tv.setText(++index + "");
//绑定点击事件
tv.setOnClickListener(clickListener);
//添加到创建的线性布局中
layout.addView(view);
}
//添加到显示的父线性布局中
mColumnsLinear.addView(layout);
}
/**
* 点击事件
*/
private OnClickListener clickListener = new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println(((TextView)v).getText());
}
};
}
2.activity_main.xml主布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
android:id="@+id/columns_linear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" />
</RelativeLayout>
3.item_column.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/text"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:text="资源共享"/>
</LinearLayout>
代码上传完成,这个只是一个简单的例子
想实现跟难一点的,但是没有思绪。。。。
希望如果有更好的实现方法,希望留言。。。。谢谢