GridLayout выходит за пределы

Я пытаюсь воспроизвести этот макет калькулятора с помощью GridLayout.

введите здесь описание изображения

но это то, что я получаю с кодом, который я пробовал.

введите здесь описание изображения

На самом деле на устройстве все еще хуже, еще больше обрезается последняя кнопка равенства, которая должна занимать два ряда.

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#000000"
    android:columnCount="5"
    android:rowCount="2"
    android:orientation="horizontal"
    android:padding="5dp">

    <Button
        android:layout_columnSpan="1"
        android:layout_rowSpan="1"
        android:text="1" />

    <Button
        android:layout_columnSpan="1"
        android:layout_rowSpan="1"
        android:text="2" />

    <Button
        android:layout_columnSpan="1"
        android:layout_rowSpan="1"
        android:text="3" />

    <Button
        android:layout_columnSpan="1"
        android:layout_rowSpan="1"
        android:text="-" />

    <Button
        android:layout_columnSpan="1"
        android:layout_rowSpan="2"
        android:layout_gravity="fill_vertical"
        android:text="=" />


    <Button
        android:layout_columnSpan="2"
        android:layout_rowSpan="1"
        android:layout_gravity="fill_horizontal"
        android:text="0" />

    <Button
        android:layout_columnSpan="1"
        android:layout_rowSpan="1"
        android:text="." />

    <Button
        android:layout_columnSpan="1"
        android:layout_rowSpan="1"
        android:text="+" />

    <Space
        android:layout_columnSpan="1"
        android:layout_rowSpan="1"
        android:text="-" />

    <Space
        android:layout_columnSpan="1"
        android:layout_rowSpan="1"
        android:text="=" />

</GridLayout>

тем не менее, он продолжает выходить за пределы. Я попытался перейти на «android.support.v7.widget.GridLayout» в соответствии с этой веткой:

Столбец GridLayout выходит за его границы

но не очень помогло.

Любые подсказки, как заставить его точно соответствовать размеру телефона?


person gmmo    schedule 05.01.2016    source источник


Ответы (1)


Измените представление на android.support.v7.widget.GridLayout. А также добавьте app:layout_columnWeight в каждое представление и установите для layout_width значение 0dp. Вид Space не нужен.

(Протестировано с Genymotion/VM Nexus Android 5.0 и Nexus 9 с Android 6.0.1)

Это конечный результат:

<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#fff"
    app:columnCount="5"
    app:rowCount="2"
    app:orientation="horizontal"
    android:padding="5dp">

    <Button
        app:layout_columnWeight="1"
        android:layout_width="0dp"
        app:layout_columnSpan="1"
        app:layout_rowSpan="1"
        android:text="1" />

    <Button
        app:layout_columnWeight="1"
        android:layout_width="0dp"
        app:layout_columnSpan="1"
        app:layout_rowSpan="1"
        android:text="2" />

    <Button
        app:layout_columnWeight="1"
        android:layout_width="0dp"
        app:layout_columnSpan="1"
        app:layout_rowSpan="1"
        android:text="3" />

    <Button
        app:layout_columnWeight="1"
        android:layout_width="0dp"
        app:layout_columnSpan="1"
        app:layout_rowSpan="1"
        android:text="-" />

    <Button
        app:layout_columnWeight="1"
        android:layout_width="0dp"
        app:layout_columnSpan="1"
        app:layout_rowSpan="2"
        app:layout_gravity="fill_vertical"
        android:text="=" />


    <Button
        app:layout_columnWeight="1"
        android:layout_width="0dp"
        app:layout_columnSpan="2"
        app:layout_rowSpan="1"
        app:layout_gravity="fill_horizontal"
        android:text="0" />

    <Button
        app:layout_columnWeight="1"
        android:layout_width="0dp"
        app:layout_columnSpan="1"
        app:layout_rowSpan="1"
        android:text="." />

    <Button
        app:layout_columnWeight="1"
        android:layout_width="0dp"
        app:layout_columnSpan="1"
        app:layout_rowSpan="1"
        android:text="+" />

</android.support.v7.widget.GridLayout>
person Tom Sabel    schedule 05.01.2016
comment
Ты победил! Спасибо за этот ответ! - person marienke; 18.05.2017