以编程方式根据最大宽度(或高度)调整 android 按钮的大小

Resizing android button programmatically respect to maximum width (or height)

我想调整以编程方式添加到我的 Android 应用程序(Java 代码)的按钮的大小。它们以默认的宽度和高度添加到布局中(因为没有内容)。我希望它们调整到屏幕尺寸的 1/9 以填满整个屏幕(连续 9 个按钮以填满屏幕宽度)。我试图获取屏幕宽度(或父容器宽度,因为它适合屏幕宽度)。但是只有0dp。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    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"
    tools:context=".MainActivity">

    <LinearLayout
        android:id="@+id/tabMain"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.5" />

</androidx.constraintlayout.widget.ConstraintLayout>

作为 LinearLaout(宽度和高度 match_parent)的子项添加到 tabMain(ConstraintLayout 中的 LinearLayout)的按钮

根 ConstraintLayout 大小是全屏宽度,但 LinearLayout tabMain 只是按钮 9x 按钮宽度(插入 9 个按钮的原因)。

尝试使用宽度为 match_parent 且权重总和为 9 的水平线性布局,

在此布局中动态添加按钮后,将它们的权重设置为 1,将宽度设置为 0dp。这应该有效。

//我已经为你实现了这个

这是 java 代码:

Button[] buttons=new Button[9];
        LinearLayout ll = (LinearLayout)findViewById(R.id.buttonlayout);

        for (int i=0;i<=8;i++){

            buttons[i]=new Button(MainActivity.this);
            buttons[i].setText("Button "+(i+1));
            buttons[i].setLayoutParams (new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT,1));
            ll.addView(buttons[i], new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT,1));

        }

布局如下:

<RelativeLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <LinearLayout
        android:orientation="horizontal"
        android:id="@+id/buttonlayout"
        android:weightSum="9"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">


    </LinearLayout>
</RelativeLayout>