如何在Android中使布局高度等于其宽度



我想让我的所有CardView的高度都等于它们的宽度,而且我想让每个CardView占据用户设备屏幕的同一部分。我该怎么做?我的代码是这样的:

<android.support.constraint.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginTop="10dp">
                <android.support.v7.widget.CardView
                    android:id="@+id/tool1"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="3dp"
                    android:layout_marginRight="3dp"
                    android:foregroundGravity="center"
                    app:layout_constraintHorizontal_weight="1"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toLeftOf="@id/tool2">
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="@drawable/too_4_background"
                        android:gravity="center"
                        android:orientation="vertical"
                        android:paddingBottom="10dp"
                        android:paddingTop="10dp">
                        <LinearLayout
                            android:layout_width="30dp"
                            android:layout_height="30dp"
                            android:background="@drawable/emoji_background"
                            android:gravity="center">
                            <TextView
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                android:gravity="center"
                                android:text="&#x1F633;"
                                android:textSize="15dp" />
                        </LinearLayout>
                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="4dp"
                            android:gravity="center"
                            android:text="ارسال رایگان"
                            android:textColor="#ffffff"
                            android:textSize="13dp" />
                    </LinearLayout>

                </android.support.v7.widget.CardView>
                <android.support.v7.widget.CardView
                    android:id="@+id/tool2"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="3dp"
                    android:layout_marginRight="3dp"
                    app:layout_constraintHorizontal_weight="1"
                    app:layout_constraintLeft_toRightOf="@id/tool1"
                    app:layout_constraintRight_toLeftOf="@id/tool3">
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="@drawable/too_4_background"
                        android:gravity="center"
                        android:orientation="vertical"
                        android:paddingBottom="10dp"
                        android:paddingTop="10dp">
                        <LinearLayout
                            android:layout_width="30dp"
                            android:layout_height="30dp"
                            android:background="@drawable/emoji_background"
                            android:gravity="center">
                            <TextView
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                android:gravity="center"
                                android:text="&#x1F633;"
                                android:textSize="15dp" />
                        </LinearLayout>
                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="4dp"
                            android:gravity="center"
                            android:text="ارسال رایگان"
                            android:textColor="#ffffff"
                            android:textSize="13dp" />
                    </LinearLayout>

                </android.support.v7.widget.CardView>
                <android.support.v7.widget.CardView
                    android:id="@+id/tool3"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="3dp"
                    android:layout_marginRight="3dp"
                    app:layout_constraintHorizontal_weight="1"
                    app:layout_constraintLeft_toRightOf="@id/tool2"
                    app:layout_constraintRight_toLeftOf="@id/tool4">
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="@drawable/too_4_background"
                        android:gravity="center"
                        android:orientation="vertical"
                        android:paddingBottom="10dp"
                        android:paddingTop="10dp">
                        <LinearLayout
                            android:layout_width="30dp"
                            android:layout_height="30dp"
                            android:background="@drawable/emoji_background"
                            android:gravity="center">
                            <TextView
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                android:gravity="center"
                                android:text="&#x1F633;"
                                android:textSize="15dp" />
                        </LinearLayout>
                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="4dp"
                            android:gravity="center"
                            android:text="ارسال رایگان"
                            android:textColor="#ffffff"
                            android:textSize="13dp" />
                    </LinearLayout>
                </android.support.v7.widget.CardView>
                <android.support.v7.widget.CardView
                    android:id="@+id/tool4"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="3dp"
                    android:layout_marginRight="3dp"
                    app:layout_constraintHorizontal_weight="1"
                    app:layout_constraintLeft_toRightOf="@id/tool3"
                    app:layout_constraintRight_toRightOf="parent"
                    >
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="@drawable/too_4_background"
                        android:gravity="center"
                        android:orientation="vertical"
                        android:paddingBottom="10dp"
                        android:paddingTop="10dp">
                        <LinearLayout
                            android:layout_width="30dp"
                            android:layout_height="30dp"
                            android:background="@drawable/emoji_background"
                            android:gravity="center">
                            <TextView
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                android:gravity="center"
                                android:text="&#x1F633;"
                                android:textSize="15dp" />
                        </LinearLayout>
                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="4dp"
                            android:gravity="center"
                            android:text="ارسال رایگان"
                            android:textColor="#ffffff"
                            android:textSize="13dp" />
                    </LinearLayout>
                </android.support.v7.widget.CardView>

            </android.support.constraint.ConstraintLayout>

如果问题是设置相同的高度和宽度,下面是代码。

<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.card.MaterialCardView
    app:layout_constraintDimensionRatio="1:1"
    android:layout_width="0dp"
    android:layout_height="0dp">
</android.support.design.card.MaterialCardView>
</android.support.constraint.ConstraintLayout>

您需要一个自定义的CardView,比如SquareCardView:

public class SquareCardView extends CardView {
  public SquareCardView(Context context) {
    super(context);
  }
  public SquareCardView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }
  public SquareCardView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }
  public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int size = Math.min(getMeasuredWidth(), getMeasuredHeight());
    setMeasuredDimension(size, size);
  }
}

然后,在布局中使用自定义卡视图:

<com.yourPackageName.SquareCardView
    android:id="@+id/tool1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="3dp"
    android:layout_marginRight="3dp"
    android:foregroundGravity="center"
    app:layout_constraintHorizontal_weight="1"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toLeftOf="@id/tool2">

最新更新