【问题标题】:What's wrong with my include in RelativeLayout?我在 RelativeLayout 中的包含有什么问题?
【发布时间】:2010-07-09 23:59:38
【问题描述】:

我想创建一个顶部有标题栏,底部有导航栏的活动。我使用include 将标题栏布局和导航栏布局包含在主布局中,如下所示。结果是标题栏和导航栏都到了屏幕的顶部。有人能告诉我为什么吗?谢谢!

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/home_widget" android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:background="@drawable/background">

    <include android:id="@+id/title_bar" layout="@layout/title_bar" 
        android:layout_alignParentTop="true" />

    <include android:id="@+id/navigation_bar" layout="@layout/navigation_bar" 
        android:layout_alignParentBottom="true"/> 
</RelativeLayout>

[编辑] 我没有找到根本原因。但以下工作:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/home_widget" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:background="@drawable/background">

<RelativeLayout android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true"
    android:id="@+id/title_bar" >

    <include layout="@layout/title_bar" />
</RelativeLayout>

<RelativeLayout android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true"
    android:id="@+id/navigation_bar" >

    <include layout="@layout/navigation_bar" />
 </RelativeLayout>

【问题讨论】:

  • 你在一个相对布局中,我想你忘记了导航栏的 android:layout_below="@id/title_bar"
  • 请更新您的问题以显示res/layout/title_bar.xmlres/layout/navigation_bar.xml 的内容,然后回复@我。

标签: android android-layout


【解决方案1】:

为了覆盖您所包含的布局的属性,您还必须同时覆盖布局宽度和布局高度。如果这两个设置都没有被覆盖,那么您尝试的任何其他布局更改都将被忽略。

上面的布局

<include android:id="@+id/title_bar" layout="@layout/title_bar" 
    android:layout_alignParentTop="true"
/>
<include android:id="@+id/navigation_bar" layout="@layout/navigation_bar" 
    android:layout_alignParentBottom="true"/>

实际上应该有一个包装内容或填充父项,视情况而定。

<include android:id="@+id/navigation_bar" layout="@layout/navigation_bar"  android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"/>

【讨论】:

  • ugh 太笨了,在使用包含的布局中重新声明 layout_width 和 layout_height。它虽然有效。
  • 哇,不知道。很棒的小费。我的包含没有定位在相对布局中,设置宽度和高度使其尊重布局流程。谢谢
  • 这应该包含在 lint 检查中
  • @jucas 显然现在是。不知道他们什么时候介绍的。 Lint id 是 IncludeLayoutParam
【解决方案2】:

从外观上看,您没有任何东西可以填充顶部和底部栏之间的空间。

另一方面,我倾向于使用 LinearLayout,并以下列方式使用 layout_weight 属性;

title_bar & navigation_bar 得到 layout_weight="0",两者之间的内容得到 layout_weight="1"。如果您的线性布局是,这会告诉布局管理器扩展内容以填充两者之间的空间;

标题栏 内容 导航栏

【讨论】:

    猜你喜欢
    • 2013-12-25
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 2015-02-22
    • 2021-09-09
    • 2017-08-27
    相关资源
    最近更新 更多