繁体   English   中英

LinearLayout子项未显示

LinearLayout child not displaying

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我要创建以下布局。

在此处输入图片说明

布局结构:

LinearLayout
  --> ImageButton
  --> TextView
  --> Button

我想要的是在其父布局内水平显示Textview的文本中心。

但是我无法到达那里,现在按钮不见了:

在此处输入图片说明

我的代码:

     <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="horizontal"
            android:background="@color/toolBar"
            android:gravity="center">

            <ImageButton
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="?attr/homeAsUpIndicator"
                android:background="@drawable/back_button"
                android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
                android:onClick="activityFinish"
                android:clickable="true"
                android:focusable="true"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/qaa_book_name"
                android:textColor="@color/white"
                android:textSize="20sp"
                android:textStyle="bold"
                android:gravity="center"
                android:text="xxx"
                />

            <Button
                android:id="@+id/qaa_end_test"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:visibility="visible"
                android:text="yyy"
                android:textColor="@color/white"/>

        </LinearLayout>
5 个回复

检查此更新的布局

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:orientation="horizontal"
        android:background="@color/toolBar"
        android:gravity="center">

        <ImageButton
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="?attr/homeAsUpIndicator"
            android:background="@drawable/back_button"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            android:onClick="activityFinish"
            android:clickable="true"
            android:focusable="true"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/qaa_book_name"
            android:textColor="@color/white"
            android:textSize="20sp"
            android:textStyle="bold"
            android:gravity="center"
            android:text="xxx"
            android:layout_weight="1"
            />

        <Button
            android:id="@+id/qaa_end_test"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:visibility="visible"
            android:text="yyy"
            android:textColor="@color/white"/>

    </LinearLayout>

编辑:

根据LinearLayout文档,

当您设置android:orientation以指定子视图显示在行还是列中时,

您可以在各个子视图上设置android:layout_weight ,以指定线性布局如何在其中包含的视图之间划分剩余空间。


android:layout_weight :此属性根据视图应在屏幕上占据多少空间来为其分配“重要性”值。 较大的权重值使其可以扩展以填充父视图中的所有剩余空间。 子视图可以指定一个权重值,然后视图组中的所有剩余空间将按其声明的权重比例分配给子视图。 默认权重为零

这意味着当您将权重1 (在您的情况下为TextView放置时,它将占用至少所有空间,除非最后一个元素(在我们的情况下为Button获得容器中的空间,所以一旦Button占用, TextView扩散以填充所有空间它的wrap_content属性。

通过官方文档参考本指南

希望现在,我说清楚了!

LinearLayout为其子级支持一个特殊的属性,称为layout_weight 在一个或多个子视图上指定此属性将使LinearLayout首先按正常方式布置所有内容,然后将剩余的所有多余空间分配给已指定权重的子项(然后,根据每个子项的值划分此多余空间重量)。

体重最常见的用例是只给一个孩子一个体重,有效地说“给其他一切所需的空间,然后再给这个孩子所有的剩余空间”。 这正是您想要的; 您在两侧都有两个应该为wrap_content视图,然后在中间的一个视图中要填充剩余的空间。

当您只有一个子代的layout_weight ,通常将其匹配尺寸(水平布局的宽度,垂直布局的高度)的大小设置为0dp 这是因为LinearLayout在确定剩余的“额外”空间之前,仍必须先进行所有步骤,以将所有内容进行布局,并且调整0dp视图的速度比调整wrap_content视图的速度要快...并且它将被拉伸到尺寸相同,无论您给什么尺寸。

考虑到所有这些,您的布局应如下所示:

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

    <ImageButton
        android:layout_width="40dp"
        android:layout_height="40dp"
        .../>

    <TextView
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        .../>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        .../>

</LinearLayout>
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg_image">

    <ImageView
        android:id="@+id/img_back"
        android:layout_width="@dimen/_30sdp"
        android:layout_height="@dimen/_30sdp"
        android:src="@drawable/ic_arrow_back_black_24dp"
        android:onClick="onClick"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:text="xxx"
        android:textColor="@android:color/black"
        android:textSize="@dimen/_24sdp"
        android:textStyle="bold" />

    <Button
        android:id="@+id/btn_yyy"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick"
        android:text="yyy"
        android:layout_gravity="end"
        android:textAllCaps="false"
        android:textSize="@dimen/textsize_18sp" />

</FrameLayout>
   <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/qaa_book_name"
        android:textColor="@color/white"
        android:textSize="20sp"
        android:textStyle="bold"
        android:gravity="center"
        android:text="xxx"
        android:layout_weight="1"
        />

   Problem is in your text view {android:layout_width="match_parent"}  replace it 
   like this   android:layout_width="wrap_content"

LinearLayout中所有视图的默认权重为0。视图的权重最小,其优先级最高。

如果您将视图设置为: android:layout_weight="1"而其他视图均使用默认权重,则具有默认权重的视图将获得优先级。 它们在LinearLayout中的大小将归因于权重为1的视图。

我希望此信息可以帮助您理解为什么一行可以解决您的问题。

3 在LinearLayout中未显示按钮

我希望它看起来像这样(这是“图形布局”编辑器的屏幕截图): 所以我创建了布局: 但是,当我在模拟器上运行我的应用程序时,我看到了: 当我单击放大镜时,仍然没有按钮的迹象。 ...

4 LinearLayout未显示创建的网格

ID为“linBoardGame”的LinearLayout未显示创建的网格。 网格中的每个单元格都使用可绘制的“cell_bg.xml”创建。 代码编译时没有任何错误,但LinearLayout“linBoardGame”为空白,不显示任何网格。 MainActivity.java: ...

2019-05-22 19:21:25 2 35   android
5 按钮未显示在 LinearLayout 中

我试图在TextView之后的LinearLayout添加一个Button ,但它没有显示。 这是我的布局代码 TextView使用正确的文本正确显示,但我得到了一个三到四行长的大空白空间,而不是一个Button 。 我错过了什么? ...

6 RelativeLayout子项未显示

我正在为Android开发ActivityOverlay渲染器。 不幸的是,“进度条”视图无法正确显示。 到目前为止,这是我的代码: 我期望通过_overlay.AddView(_indicator, new LayoutParams(LayoutParams.WrapConte ...

7 WPF MenuItem子项未显示

我正在使用ObjectDataProvider和DataTemplate填充菜单栏中的MenuItem。 (WPF,C#/ XAML)请参见下面的摘要。 结果:出现顶部菜单项,当我单击它时,包装菜单项(带有绑定的标题文本的项)与小箭头一起出现,表明存在子项,但是将鼠标悬停或单击箭头不会显 ...

8 从另一个活动返回时未绘制 LinearLayout 的子项

在应用启动时,LinearLayout (LL) 的所有子级都会被渲染。 但是,当来自另一个活动时,使用相同的代码,LL 的子项不可见,但仍包含在视图树中。 看: activity_main.xml是: 至少在应用程序启动孩子的代码是 在 class 渲染上面的布局我只是这样做: 我知道孩子们在视 ...

10 XML中定义的扩展LinearLayout的子项不显示

在我的项目中,我有相同模式重复的屏幕 - 它基本上是视图的容器,包括带有标题,图像和特定背景的线性布局。 为了避免多次复制和粘贴相同的序列,我认为我可以创建一个复合视图,扩展LinearLayout并在那里定义所有“样式”,然后在我的布局中使用该组件。 我按照howto和例子,让我的复合视图 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM