我要创建以下布局。

在此处输入图片说明

布局结构:

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>

#1楼 票数:1 已采纳

检查此更新的布局

<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属性。

通过官方文档参考本指南

希望现在,我说清楚了!

#2楼 票数:1

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>

#3楼 票数:0

<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>

#4楼 票数:0

   <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"

#5楼 票数:0

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

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

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

  ask by EagerToLearn translate from so

未解决问题?本站智能推荐:

2回复

在LinearLayout下方未显示?

只有ScrollView是可见的吗?
1回复

LinearLayout中的ListView不会增长以显示所有子项

我正在建立一个从侧面打开的滑动菜单。 在菜单中,有一个ScrollView ,里面有一个LinearLayout ,用于一般布局和滚动。 另外,为了显示菜单项,我在LinearLayout有一个列表视图,这意味着视图层次结构如下: 我正在尝试使用自定义适配器填充ListView ,该适配
1回复

在LinearLayout中未显示按钮

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

LinearLayout未显示创建的网格

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

按钮未显示在LinearLayout中

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

RelativeLayout子项未显示

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

AndroidExpandableListView子项未显示

我想在我的项目中创建一个可扩展的列表视图。 ExpandableListViewAdapter.Java } 这是我在Activity中放入的用于调用数据的过程。 我从sqlite数据库获取数据。 在我的OnCreate中,我这样称呼它 当我运行程序时,它仅显示标题,但不显
2回复

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

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