如何在相对布局中水平等距放置视图?

时间:2019-05-22 19:55:13

标签: android android-relativelayout

如何将视图等距放置在relative layout中?

我想根据添加的视图数将视图放置在相对布局中,并占据相同的空间,类似于weight中的Linear Layout

我尝试过的布局(用于三个视图)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!--<View
        android:id="@+id/root"
        android:layout_width="64dp"
        android:layout_height="64dp"
        android:layout_centerHorizontal="true"
        android:layout_margin="16dp"
        android:background="@android:color/holo_blue_bright"/>-->

    <RelativeLayout
        android:id="@+id/left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true">

        <View
            android:layout_width="64dp"
            android:layout_height="64dp"
            android:layout_centerHorizontal="true"
            android:layout_margin="16dp"
            android:background="@android:color/holo_blue_bright"/>

    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/middle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@id/left">

        <View
            android:layout_width="64dp"
            android:layout_height="64dp"
            android:layout_centerHorizontal="true"
            android:layout_margin="16dp"
            android:background="@android:color/holo_blue_bright"/>

    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@id/middle"
        android:layout_alignParentEnd="true">

        <View
            android:layout_width="64dp"
            android:layout_height="64dp"
            android:layout_centerHorizontal="true"
            android:layout_margin="16dp"
            android:background="@android:color/holo_blue_bright"/>

    </RelativeLayout>

</RelativeLayout>

上述布局的问题是前两个视图就像wrap_content,而第三个视图则占据了所有剩余空间。如何使每个视图占据水平空间的三分之一?

注意:
1.请仅提供相对布局的解决方案,而不提供linear layoutconstraint layout的解决方案。
2.所需的解决方案不应与Linear或其他布局嵌套。 (想要平面布局)

1 个答案:

答案 0 :(得分:1)

如果要坚持使用相对布局,可以这样,获得屏幕宽度。(需要获得像素值)

 private int Screendp(){
    DisplayMetrics dm = new DisplayMetrics();

    WindowManager windowManager = (WindowManager) this.getSystemService(WINDOW_SERVICE);
    windowManager.getDefaultDisplay().getMetrics(dm);
    int widthInDP = Math.round(dm.widthPixels / dm.density);
    return widthInDP;
}

这是将dp转换为px的方式

  public int dpToPx(int dp) {

    float density = this.getResources()
            .getDisplayMetrics()
            .density;
    return Math.round((float) dp * density);
}

因此,在您的活动中,为每个子视图设置l layoutparams,如下所示,

parent= findViewById(R.id.parent);
    left= findViewById(R.id.left );
    middle= findViewById(R.id.middle);
    right= findViewById(R.id.right );



    RelativeLayout.LayoutParams leftparams = new RelativeLayout.LayoutParams(  dpToPx(64), dpToPx(64));
    leftparams.leftMargin= 0;
    left.setLayoutParams(leftparams);

    RelativeLayout.LayoutParams middleparams = new RelativeLayout.LayoutParams(  dpToPx(64), dpToPx(64));
    middleparams.leftMargin=dpToPx((Screendp()/3));
    middle.setLayoutParams(middleparams);

    RelativeLayout.LayoutParams rightparams = new RelativeLayout.LayoutParams(  dpToPx(64), dpToPx(64));
    rightparams.leftMargin=dpToPx((Screendp()/3)*2);
    right.setLayoutParams(rightparams);

这正在工作,我已经尝试过了。

enter image description here