Java 相同宽度和高度的Android按钮?

Java 相同宽度和高度的Android按钮?,java,android,button,Java,Android,Button,我正在做一个井字游戏,我需要使我的按钮的宽度和高度相同 这是我的xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:gravity="center_horizontal" ...> <TextView android:textSize="30dp"

我正在做一个井字游戏,我需要使我的按钮的宽度和高度相同

这是我的xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center_horizontal" ...>

    <TextView
        android:textSize="30dp"
        android:textStyle="bold"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Tic-Tac-Toe" />

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/cell_00"
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/cell_10"
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/cell_20"
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <!--previous linear layout repeats twice more-->

</LinearLayout>

这是我的活动:

// imports
import android.view.ViewGroup;
public class TicTacToeActivity extends AppCompatActivity {

    private static final int SIZE = 3;

    @BindView(R.id.game_feedback)
    TextView gameFeedback;

    private Button[][] grid = new Button[SIZE][SIZE];
    private int[][] cell_ids = {
            {R.id.cell_00, R.id.cell_01, R.id.cell_02},
            {R.id.cell_10, R.id.cell_11, R.id.cell_12},
            {R.id.cell_20, R.id.cell_21, R.id.cell_22}
    };

    private Button getButtonById(int id) {
        return (Button) findViewById(id);
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tic_tac_toe);
        ButterKnife.bind(this);
        gameFeedback.setVisibility(View.INVISIBLE);
        loadGridButtons();

        Button button = (Button) findViewById(R.id.cell_00);
        int size = button.getLayoutParams().width;
        button.setLayoutParams(new ViewGroup.LayoutParams(size, size));
    }

    private void loadGridButtons() {
        for (int i = 0; i < SIZE; i++) {
            for (int j = 0; j < SIZE; j++) {
                grid[i][i] = getButtonById(cell_ids[i][j]);
            }
        }
    }
}
//导入
导入android.view.ViewGroup;
公共类TictoeActivity扩展了AppCompativity{
私有静态最终整数大小=3;
@BindView(R.id.game_反馈)
文本视图游戏反馈;
私有按钮[][]网格=新按钮[大小][大小];
私有int[][]单元ID={
{R.id.cell_00,R.id.cell_01,R.id.cell_02},
{R.id.cell_10,R.id.cell_11,R.id.cell_12},
{R.id.cell_20,R.id.cell_21,R.id.cell_22}
};
私有按钮getButtonById(内部id){
返回(按钮)findViewById(id);
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u tic\u toe);
把(这个)绑起来;
gameFeedback.setVisibility(视图.不可见);
loadGridButtons();
按钮按钮=(按钮)findViewById(R.id.cell_00);
int size=button.getLayoutParams().width;
setLayoutParams(新视图组.LayoutParams(大小,大小));
}
私有void loadGridButtons(){
对于(int i=0;i
但是,我遇到以下错误,导致我的应用程序崩溃

致命异常:主 进程:com.mathsistor.m.tictactoe,PID:20927 java.lang.ClassCastException:android.view.ViewGroup$LayoutParams 无法强制转换为android.widget.LinearLayout$LayoutParams


而不是
按钮.setLayoutParams(新的ViewGroup.LayoutParams(大小,大小))使用
按钮.setLayoutParams(新的LinearLayout.LayoutParams(大小,大小))

更新
(大小,大小)
更改为
(大小,大小)
,如果这是您正在使用的变量。否则,用您想要的大小替换变量

更新2

要获得屏幕的宽度并将其除以3,可以执行以下操作: Display Display=getWindowManager().getDefaultDisplay(); 点大小=新点(); display.getSize(size); int按钮宽度=(int)(大小为.x/3)

然后您只需传递该变量,而不是像这样传递
SIZE

button.setLayoutParams(new LinearLayout.LayoutParams(buttonwidth, buttonwidth));

这是行不通的。虽然现在我的应用程序没有崩溃,但按钮的宽度和高度不一样。这是可行的。然而,我最终想要的是读取屏幕宽度,并将第三部分作为按钮的宽度,但谢谢。您的答案解决了我的问题。我再次更新了我的答案,以帮助您获得屏幕宽度并将其除以3。非常感谢您。让我们来看看。