You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程创建铺满屏幕的5×5方形按钮网格?

实现5×5全屏方形按钮网格的Android开发指南

嘿,我来帮你把这个5×5的全屏方形按钮网格搞定!咱们一步步来:

核心思路

要做出铺满屏幕的方形按钮网格,关键是让每个按钮的宽高严格相等,并且整体适配屏幕尺寸。我们可以用「垂直LinearLayout嵌套水平LinearLayout」的方式,每行放5个按钮;也可以直接用GridLayout来简化实现,两种方案我都给你整理好啦。

方案一:嵌套LinearLayout实现

先把你给出的代码补全并修正问题,每一步都加了注释说明:

import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.Button;
import android.util.DisplayMetrics;
import androidx.appcompat.app.AppCompatActivity;

public class GridButtonActivity extends AppCompatActivity {
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = this;

        // 获取屏幕真实宽高,用来计算按钮尺寸
        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        int screenWidth = displayMetrics.widthPixels;
        int screenHeight = displayMetrics.heightPixels;

        // 计算每个方形按钮的尺寸:取屏幕宽高的较小值除以5,保证按钮是正方形且能完整铺满屏幕
        int cellSize = Math.min(screenWidth, screenHeight) / 5;

        // 外层垂直LinearLayout,用来承载5行按钮
        LinearLayout rootLayout = new LinearLayout(this);
        rootLayout.setOrientation(LinearLayout.VERTICAL);
        // 设置根布局占满整个屏幕
        rootLayout.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
        ));

        // 循环创建5行按钮
        for (int rowIndex = 0; rowIndex < 5; rowIndex++) {
            // 每行的水平LinearLayout,用来放当前行的5个按钮
            LinearLayout rowLayout = new LinearLayout(this);
            rowLayout.setOrientation(LinearLayout.HORIZONTAL);
            // 设置行布局宽度占满父容器,高度等于单个按钮的尺寸
            rowLayout.setLayoutParams(new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    cellSize
            ));
            // 让行内按钮平分宽度,避免计算偏差导致的适配问题
            rowLayout.setWeightSum(5);

            // 每行创建5个按钮
            for (int colIndex = 0; colIndex < 5; colIndex++) {
                Button button = new Button(context);
                // 设置按钮文本,方便区分不同位置的按钮
                button.setText(String.format("%d-%d", rowIndex+1, colIndex+1));

                // 设置按钮布局参数:用权重平分宽度,高度等于按钮尺寸
                LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(
                        0,
                        cellSize
                );
                buttonParams.weight = 1;
                // 可选:给按钮加一点小间距,让界面更美观
                buttonParams.setMargins(2, 2, 2, 2);
                button.setLayoutParams(buttonParams);

                // 将按钮添加到当前行布局
                rowLayout.addView(button);
            }

            // 将当前行布局添加到根布局
            rootLayout.addView(rowLayout);
        }

        // 设置根布局为Activity的内容视图
        setContentView(rootLayout);
    }
}

方案二:用GridLayout简化实现

如果不想嵌套多层LinearLayout,用GridLayout会更直接,代码量更少:

import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.GridLayout;
import android.util.DisplayMetrics;
import androidx.appcompat.app.AppCompatActivity;

public class GridButtonActivity extends AppCompatActivity {
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = this;

        // 获取屏幕宽高
        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        int screenWidth = displayMetrics.widthPixels;
        int screenHeight = displayMetrics.heightPixels;
        int cellSize = Math.min(screenWidth, screenHeight) / 5;

        // 创建GridLayout,直接设置行列数
        GridLayout gridLayout = new GridLayout(this);
        gridLayout.setColumnCount(5);
        gridLayout.setRowCount(5);
        gridLayout.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
        ));

        // 循环创建25个按钮
        for (int i = 0; i < 25; i++) {
            Button button = new Button(context);
            button.setText(String.valueOf(i+1));
            // 设置按钮的方形尺寸和小间距
            GridLayout.LayoutParams params = new GridLayout.LayoutParams();
            params.width = cellSize;
            params.height = cellSize;
            params.setMargins(2, 2, 2, 2);
            button.setLayoutParams(params);
            gridLayout.addView(button);
        }

        setContentView(gridLayout);
    }
}

关键细节提醒

  • 方形尺寸计算:用Math.min(screenWidth, screenHeight)/5可以保证不管屏幕是横屏还是竖屏,按钮都是正方形,且能完整显示5×5网格。
  • 间距优化:给按钮加小间距是为了避免按钮挤在一起,你可以根据需求调整setMargins的数值。
  • 权重适配:LinearLayout方案里的weight属性是为了防止屏幕尺寸计算有微小偏差时,按钮依然能平分空间。

内容的提问来源于stack exchange,提问作者Sherif Awad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:28:59