1

在我的应用程序中,我使用以下 FrameLayout 作为将成为页脚的片段的容器:

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

在我的活动中,我使用以下代码来添加片段:

FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
mFooterFragment = new FooterFragment();
ft.add(R.id.frameLayoutFooter, mFooterFragment);
ft.commit();

我的页脚片段的布局是:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/footerContainer"
android:layout_width="fill_parent"
android:layout_height="165dip"
android:layout_alignParentBottom="true"
android:background="#15355b" >

<RelativeLayout
    android:id="@+id/relativeLayoutTopSetcion"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

..... some buttons and imageviews here...
</RelativeLayout>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativeLayoutBottomSetcion"
    android:layout_width="fill_parent"
    android:layout_height="350dip"
    android:layout_alignParentBottom="true"
    android:visibility="**invisible**" >
..... some more imageviews and textviews here...
</RelativeLayout>
</RelativeLayout>

在某些时候,我想扩展页脚并在其中放置更多的图像视图和文本视图,但不幸的是我所有的尝试都失败了,结果是片段的 FrameLayout确实得到了扩展,但它的子元素留在了上部(旧底部)即使他们将 alignParentBottom 设置为 true - 我得到的是页脚的高度确实发生了变化,并且它的底部新添加的部分是透明的,这让我认为它的孩子没有使用它的新布局参数进行更新。 另一件事是我确实看到了 mRelativeLayoutBottomSetcion.setVisibility(View.VISIBLE) 的变化-但不在 FrameLayout 的底部(新扩展的部分),而是在扩展前的原始大小的底部。

为了扩展片段,我使用了这个框架所属的活动中的以下代码:

ViewGroup.LayoutParams params = mFrameLayoutFooter.getLayoutParams();
params.height = 500; 
mFrameLayoutFooter.requestLayout();
// setting the bootom relative layout to be visible
mRelativeLayoutBottomSetcion.setVisibility(View.VISIBLE);

我究竟做错了什么 ?

消耗性页脚是否有已知的 UI 模式?

提前致谢

4

3 回答 3

0

我注意到您的代码中有几处可能是问题所在:

  1. 片段中的父 RelativeLayout (with @+id/footerContainer) 有一个固定android:layout_height165dip,改为match_parent改为。

  2. 您也可以删除android:layout_alignParentBottom="true"它(它无论如何都不会工作,因为它的父级是 FrameLayout -layout_alignParentBottom仅适用于 RelativeLayout 的子级)。

  3. 由于我们将第 1 点更改165dipmatch_parenton,因此您应该android:layout_height="wrap_content"将 FrameLayout 上的 (with @+id/frameLayoutFooter) 更改165dip为获得您想要的。

于 2012-07-15T02:15:59.903 回答
0

有些事情我没有得到它,这可以回答你的问题:

首先,为什么在另一个只有 165dip 的相对布局中会有一个 350dip 的相对布局(relativeLayoutBottomSetcion)?

我认为您应该尝试将 FrameLayout 高度设置为 165dip,并将您的 RelativeLayout (footerContainer) 高度设置为 fill_parent。这将允许您的“footerContainer”与您的 FrameLayout 具有相同的高度,即使您将其高度更改为 500dip 也是如此。(那时您将使 relativeLayoutBottomSetcion 可见,就像您已经在做的那样)

此外,您应该将可见性设置为 GONE 而不是 INVISIBLE,因为 INVISIBLE 使您 RelativeLayout 占用屏幕上的空间,但不绘制其内容。

要完成它,请删除 android:layout_alignParentBottom="true",因为您不需要它,因为 RelativeLayout 父级是 FrameLayout,并且此属性仅在父级是 RelativeLayout 时才有效。

于 2012-07-17T17:05:14.367 回答
0

最终,我使用了可见性设置为消失的 RelativeLayout,并使用从此处获取的调整大小动画来扩展它。干杯!

于 2012-10-24T19:57:28.300 回答