Android - 嵌套 LinearLayout 中的按钮不显示

Posted

技术标签:

【中文标题】Android - 嵌套 LinearLayout 中的按钮不显示【英文标题】:Android - Button within nested LinearLayout doesn't show 【发布时间】:2021-11-19 04:51:50 【问题描述】:

我正在尝试创建一个垂直线性布局,其中每一行都是带有 2 个按钮的水平线性布局(如下图所示)。 两个按钮的高度应由左侧(“EXERCISE”)的内容决定,右侧图标的宽度应等于其高度。 这是我的代码:

<?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_
    android:layout_
    tools:context=".ui.home.ShowWorkout">

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent">

        <Button
            android:id="@+id/refresh_button"
            android:layout_
            android:layout_
            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_
            android:layout_
            android:background="#FFFFFF"
            android:fontFamily="sans-serif"
            android:text="      First set"
            android:textColor="#000000"
            android:textSize="22sp" />

        <LinearLayout
            android:orientation="horizontal"
            android:layout_
            android:layout_
            android:weightSum="9">

            <Button
                android:id="@+id/ex1"
                android:layout_
                android:layout_
                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_
                android:layout_
                android:layout_weight="8"
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>
        <LinearLayout
            android:layout_
            android:layout_
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@+id/ex2"
                android:layout_
                android:layout_weight="1"
                android:layout_
                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_
                android:layout_weight="8"
                android:layout_
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>
        <LinearLayout
            android:layout_
            android:layout_
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@+id/ex3"
                android:layout_
                android:layout_weight="1"
                android:layout_
                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_
                android:layout_weight="8"
                android:layout_
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>

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

        <LinearLayout
            android:layout_
            android:layout_
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@+id/ex4"
                android:layout_
                android:layout_weight="1"
                android:layout_
                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_
                android:layout_weight="8"
                android:layout_
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>

        <LinearLayout
            android:layout_
            android:layout_
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@+id/ex5"
                android:layout_
                android:layout_weight="1"
                android:layout_
                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_
                android:layout_weight="8"
                android:layout_
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>

        <LinearLayout
            android:layout_
            android:layout_
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@+id/ex6"
                android:layout_
                android:layout_weight="1"
                android:layout_
                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_
                android:layout_weight="8"
                android:layout_
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>

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

        <LinearLayout
            android:layout_
            android:layout_
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@+id/ex7"
                android:layout_
                android:layout_weight="1"
                android:layout_
                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_
                android:layout_weight="8"
                android:layout_
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>

        <LinearLayout
            android:layout_
            android:layout_
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@+id/ex8"
                android:layout_
                android:layout_weight="1"
                android:layout_
                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_
                android:layout_weight="8"
                android:layout_
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>
        <LinearLayout
            android:layout_
            android:layout_
            android:orientation="horizontal"
            android:weightSum="9">

            <Button
                android:id="@+id/ex9"
                android:layout_
                android:layout_weight="1"
                android:layout_
                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_
                android:layout_weight="8"
                android:layout_
                android:background="@drawable/icon_refresh"
                android:onClick="refresh"/>
        </LinearLayout>

        <TextView
            android:id="@+id/PointsText"
            android:layout_
            android:layout_
            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_
            android:layout_
            android:layout_gravity="center"
            android:onClick="goToShowBySets"
            android:text="GO!"
            android:textSize="34sp" />
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

这就是它的样子:

我指定线性布局高度的行看起来不错(除第一行之外的所有行)。但是当我尝试根据 WrapContent 进行操作时,左侧的按钮不会显示在布局中,并且正如您在图片中看到的那样,它似乎在虚线所在的下方。 如何在不指定高度的情况下将其修复为与其余行一样?

【问题讨论】:

【参考方案1】:
<LinearLayout
        android:orientation="horizontal"
        android:layout_
        android:layout_ // ===> it's wrap_content
        android:weightSum="9">

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

但在其他 LinearLayouts 中,layout_width 是 45dp

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

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

我认为最好在 XML 中设置相同的高度。

【讨论】:

是的,这正是问题所在......我希望它与 wrap_content 一起使用,但这不起作用【参考方案2】:

最终通过为图标定义设置大小来解决它。不完全是我想要的,但足够接近。 这是单行代码的样子:

<LinearLayout
        android:layout_
        android:layout_
        android:orientation="horizontal">

        <Button
            android:id="@+id/ex1"
            android:layout_
            android:layout_
            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_
            android:layout_
            android:background="@drawable/icon_refresh"
            android:onClick="refreshExercise"/>
    </LinearLayout>

【讨论】:

以上是关于Android - 嵌套 LinearLayout 中的按钮不显示的主要内容,如果未能解决你的问题,请参考以下文章

ScrollView嵌套Linearlayout显示不全的解决办法

android LinearLayout中嵌套一个textview,当textview更新时会触发LinearLayout也更新。用啥办法可以让

Android LinearLayout线性布局详解

ScrollView嵌套LinearLayout布局不能撑满全屏的问题

Android LinearLayout 填充中间

Android修炼系列,事件分发从手写一个嵌套滑动框架开始