如何将FrameLayout置于RelativeLayout中心

时间:2015-06-26 18:05:04

标签: java android android-layout android-fragments canvas

我的布局有问题,如果有些Android专家可以检查并帮助我,那就太好了。)

我有一个包含另一个FragmentB的FragmentA。

  • FragmentA包含3个FrameLayouts:

      1. FrameLayout:应位于顶部
      1. FrameLayout:应低于第一个一个包含FragmentB (id = frame2)
      1. FrameLayout:应该在底部
  • FragmentB还包含1个FrameLayout:

    • 我正在以这种方式以编程方式将视图(例如图像)添加到此FrameLayout:
frameLayout.addView(new ImageClass(id);

问题是,图像不是在中间水平居中。

这是第一个fragmentA的布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:gravity="center_horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/frame1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <FrameLayout
        android:id="@+id/frame2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/frame1" />

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

</RelativeLayout>

这是fragmentB的布局文件(包含在FragmentA中 - &gt;带有ID帧2的FrameLayout 2)

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/imageClass"
    android:background="#0000FF"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
</FrameLayout>

图像将通过画布插入到视图中,并带有以下代码:

Bitmap image= BitmapFactory.decodeResource(getResources(), id);
canvas.drawBitmap(image, 0, 0, null);

我认为android:gravity="center_horizontal"中的RelativeLayoutandroid:layout_width="wrap_content"FrameLayouts的{​​{1}}中的FragmentA都认为集中。但它在左侧。

它有两个截图(第一个)以及它应该如何显示(第二个):

How it looks

How it should look

对不起链接,但我无法发布图片(不是声望)

1 个答案:

答案 0 :(得分:0)

RelativeLayouts处理重力的方式与您预期的不同(link):

  

请注意,由于RelativeLayout认为每个孩子相对于彼此的定位很重要,因此设置重力会影响所有孩子在父母中作为单个单位的定位。儿童相对定位后会发生这种情况。

快速解决方法是将frame2从FrameLayout更改为RelativeLayout,添加match_parent宽度并将中心重力放在其上。

    <RelativeLayout
        android:id="@+id/frame2"
        android:gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/frame1"/>

根据视图的要求,您可以采取许多其他方法。通常最好避免嵌套RelativeLayouts,但在你的情况下可能是必要的。

可能重复here