Android — Кнопка внутри вложенного LinearLayout не отображается

#android #android-layout #android-linearlayout #android-button #android-wrap-content

Вопрос:

Я пытаюсь создать вертикальный линейный макет, в котором каждая строка представляет собой горизонтальный линейный макет с 2 кнопками (как вы можете видеть на рисунке ниже). Высота обеих кнопок должна определяться содержимым левой («УПРАЖНЕНИЕ»), а ширина значка справа должна быть равна его высоте. Это мой код:

 <?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=".ui.home.ShowWorkout">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent">

        <Button
            android:id="@ id/refresh_button"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_marginStart="2dp"
            android:layout_marginLeft="2dp"
            android:background="@drawable/icon_refresh"
            android:onClick="refresh"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
        <TextView
            android:id="@ id/FirstSetText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#FFFFFF"
            android:fontFamily="sans-serif"
            android:text="      First set"
            android:textColor="#000000"
            android:textSize="22sp" />

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:weightSum="9">

            <Button
                android:id="@ id/ex1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="#AFEEEE"
                android:fontFamily="sans-serif"
                android:onClick="ShowExercise"
                android:text="Exercise"
                android:textColor="#FFFFFF"
                android:textSize="24sp"/>

            <Button
                android:id="@ id/ex1_refresh_button"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                android:layout_weight="8"
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@ id/ex2"
                android:layout_width="fill_parent"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:background="#AFEEEE"
                android:fontFamily="sans-serif"
                android:onClick="ShowExercise"
                android:text="Exercise"
                android:textColor="#FFFFFF"
                android:textSize="24sp"/>

            <Button
                android:id="@ id/ex2_refresh_button"
                android:layout_width="fill_parent"
                android:layout_weight="8"
                android:layout_height="match_parent"
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@ id/ex3"
                android:layout_width="fill_parent"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:background="#AFEEEE"
                android:fontFamily="sans-serif"
                android:onClick="ShowExercise"
                android:text="Exercise"
                android:textColor="#FFFFFF"
                android:textSize="24sp"/>

            <Button
                android:id="@ id/ex3_refresh_button"
                android:layout_width="fill_parent"
                android:layout_weight="8"
                android:layout_height="match_parent"
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>

        <TextView
            android:id="@ id/SecondSetText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#FFFFFF"
            android:fontFamily="sans-serif"
            android:text="      Second set"
            android:textColor="#000000"
            android:textSize="22sp" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@ id/ex4"
                android:layout_width="fill_parent"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:background="#AFEEEE"
                android:fontFamily="sans-serif"
                android:onClick="ShowExercise"
                android:text="Exercise"
                android:textColor="#FFFFFF"
                android:textSize="24sp"/>

            <Button
                android:id="@ id/ex4_refresh_button"
                android:layout_width="fill_parent"
                android:layout_weight="8"
                android:layout_height="match_parent"
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@ id/ex5"
                android:layout_width="fill_parent"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:background="#AFEEEE"
                android:fontFamily="sans-serif"
                android:onClick="ShowExercise"
                android:text="Exercise"
                android:textColor="#FFFFFF"
                android:textSize="24sp"/>

            <Button
                android:id="@ id/ex5_refresh_button"
                android:layout_width="fill_parent"
                android:layout_weight="8"
                android:layout_height="match_parent"
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@ id/ex6"
                android:layout_width="fill_parent"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:background="#AFEEEE"
                android:fontFamily="sans-serif"
                android:onClick="ShowExercise"
                android:text="Exercise"
                android:textColor="#FFFFFF"
                android:textSize="24sp"/>

            <Button
                android:id="@ id/ex6_refresh_button"
                android:layout_width="fill_parent"
                android:layout_weight="8"
                android:layout_height="match_parent"
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>

        <TextView
            android:id="@ id/ThirdSetText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#FFFFFF"
            android:fontFamily="sans-serif"
            android:text="      Third set"
            android:textColor="#000000"
            android:textSize="22sp" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@ id/ex7"
                android:layout_width="fill_parent"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:background="#AFEEEE"
                android:fontFamily="sans-serif"
                android:onClick="ShowExercise"
                android:text="Exercise"
                android:textColor="#FFFFFF"
                android:textSize="24sp"/>

            <Button
                android:id="@ id/ex7_refresh_button"
                android:layout_width="fill_parent"
                android:layout_weight="8"
                android:layout_height="match_parent"
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@ id/ex8"
                android:layout_width="fill_parent"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:background="#AFEEEE"
                android:fontFamily="sans-serif"
                android:onClick="ShowExercise"
                android:text="Exercise"
                android:textColor="#FFFFFF"
                android:textSize="24sp"/>

            <Button
                android:id="@ id/ex8_refresh_button"
                android:layout_width="fill_parent"
                android:layout_weight="8"
                android:layout_height="match_parent"
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@ id/ex9"
                android:layout_width="fill_parent"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:background="#AFEEEE"
                android:fontFamily="sans-serif"
                android:onClick="ShowExercise"
                android:text="Exercise"
                android:textColor="#FFFFFF"
                android:textSize="24sp"/>

            <Button
                android:id="@ id/ex9_refresh_button"
                android:layout_width="fill_parent"
                android:layout_weight="8"
                android:layout_height="match_parent"
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>

        <TextView
            android:id="@ id/PointsText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#FFFFFF"
            android:fontFamily="sans-serif"
            android:text="      Total points:"
            android:textColor="#000000"
            android:textSize="22sp" />

        <Button
            android:id="@ id/goButton"
            style="@style/Widget.AppCompat.Button.Colored"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:onClick="goToShowBySets"
            android:text="GO!"
            android:textSize="34sp" />
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
 

И вот как это выглядит:

[![введите описание изображения здесь][1]][1] [1]: https://i.stack.imgur.com/HmyKu.png][1]][1]

Строки, в которых я указываю высоту линейной компоновки, выглядят хорошо (все строки, кроме первой). Но когда я пытаюсь сделать это в соответствии с wrapContent, кнопка слева не отображается в макете, и, как вы можете видеть на картинке, она кажется ниже, где находятся ломаные линии. Как мне исправить это, чтобы оно выглядело как остальные строки без указания высоты?

Ответ №1:

 <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" // ===> it's wrap_content
        android:weightSum="9">

        <Button
            android:id="@ id/ex1"
 

Но в других линейных отображениях ширина layout_width составляет 45dp

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="45dp"  // ===> it's 45dp
        android:orientation="horizontal"
        android:weightSum="9">

        <Button
            android:id="@ id/ex2" 
 

Я думаю, что лучше сделать такую же высоту в вашем XML.

Комментарии:

1. Да, в этом-то и проблема… Я хочу, чтобы это было с wrap_content, но это не сработает

Ответ №2:

В конце концов решил эту проблему, определив установленный размер значка. Не совсем то, что я искал, но достаточно близко. Вот как выглядит код одной строки:

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@ id/ex1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="#AFEEEE"
            android:fontFamily="sans-serif"
            android:onClick="ShowExercise"
            android:text="Exercise"
            android:textColor="#FFFFFF"
            android:textSize="22sp"/>

        <Button
            android:id="@ id/ex1_refresh_button"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:background="@drawable/icon_refresh"
            android:onClick="refreshExercise"/>
    </LinearLayout>