如何将视图等距放置在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 layout
或constraint layout
的解决方案。
2.所需的解决方案不应与Linear
或其他布局嵌套。 (想要平面布局)
答案 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);
这正在工作,我已经尝试过了。