我想创建以下布局。
布局结构:
<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的文本中心。
但是我无法到达那里,现在按钮不见了:
我的代码:
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;
^
答案 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 属性占用空间,从而扩展为填充所有空间。
现在希望,我说清楚了!
答案 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的视图。
我希望此信息可以帮助您理解为什么一行可以解决您的问题。