Android LinearLayout实现多行多列

本文介绍了一个简单的Android应用程序实例,展示了如何利用LinearLayout组件实现数据的多行多列显示。通过创建自定义的多行多列布局,每个单元格内包含一个TextView用于展示数据。程序还包含了点击事件监听,方便用户查看每个单元格的内容。
摘要由CSDN通过智能技术生成

半夜了,直接上代码,注释都在代码里面,其实吧,这个很简单。。。。。

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>
代码上传完成,这个只是一个简单的例子

想实现跟难一点的,但是没有思绪。。。。

希望如果有更好的实现方法,希望留言。。。。谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值