LinearLayout子项未显示

时间:2018-10-12 14:24:58

标签: android

我想创建以下布局。

enter image description here

布局结构:

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

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

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

enter image description here

我的代码:

drivers/mmc/host/sdhci-msm.c: In function 'sdhci_msm_probe':
drivers/mmc/host/sdhci-msm.c:169:23: error: expected '{' before string constant
 #define HOST_MMC_MMC  "mmc0"
                       ^
drivers/mmc/host/sdhci-msm.c:2818:9: note: in expansion of macro 'HOST_MMC_MMC'
  struct HOST_MMC_MMC;
         ^ 

5 个答案:

答案 0 :(得分: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时,除非最后一个元素({{1} }(在我们的示例中)获取了容器中的空间,因此Button会通过其 wrap_content 属性占用空间,从而扩展为填充所有空间。

通过official doc

参阅本指南

现在希望,我说清楚了!

答案 1 :(得分: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>

答案 2 :(得分: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>

答案 3 :(得分: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"

答案 4 :(得分:0)

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

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

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