Изменение размера кнопки Android программно относительно максимальной ширины (или высоты) - PullRequest
0 голосов
/ 02 октября 2019

Я хочу изменить размер кнопок, которые я программно добавил в свое приложение для 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 (LinearLayout в ConstraintLayout)

Корневой размер ConstraintLayout - это полная ширина экрана, но вкладка LinearLayoutMain - этотолько кнопки 9x ширина кнопки (причина установки 9 кнопок).

1 Ответ

0 голосов
/ 02 октября 2019

Попробуйте использовать горизонтальный линейный макет с шириной match_parent и weightsum 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>
...