具有相对放置按钮的方形布局 - Android

Square layout with relatively placed buttons - Android

对不起,我的问题可能很愚蠢,但我是初学者。 我有 "relative" 方形布局,我需要在这个方形布局中插入按钮,这相对改变了大小和位置。这些参数将取决于方形布局的尺寸。第一张图是正方形布局的尝试,我想把按钮放在那里。在第二张图片上显示的可能看起来像结果。对不起我的英语:)

感谢您的评论。

这是我的squarelayout.java

package com.example.squarelayout;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;

public class SquareView extends View {
  public SquareView(Context context) {
    super(context);
  }

  public SquareView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public SquareView(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);
  }
}

这是我的activity_main.xml

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

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="top"
    android:orientation="horizontal"
    android:weightSum="100">


      <com.example.squarelayout.SquareView
          android:layout_width="0dp"
          android:layout_height="fill_parent"
          android:layout_weight="100"
          android:background="#f00"
          android:orientation="horizontal" />

  </LinearLayout>

</FrameLayout>

SquareView class 更改为扩展 RelativeLayout 而不是 View

如果您像下面那样更改 activity_main.xml,删除 LinearLayout 并将 SquareView 的宽度和高度设置为 fill_parent,那么它不会使方形消失:

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

          <com.example.transparentcircle.SquareView
          android:id="@+id/squareview"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:background="#f00">

              <Button
                  android:id="@+id/button1"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_marginLeft="160dp"
                  android:layout_marginTop="40dp"
                  android:text="B"/>

              <Button
                  android:id="@+id/button2"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_marginLeft="120dp"
                  android:layout_marginTop="100dp"
                  android:text="B"/>

          </com.example.transparentcircle.SquareView>

</FrameLayout>

按钮可以添加到 xml 中的 SquareView,如上或以编程方式创建。

您还可以根据 SquareView 的大小在代码中设置边距。但是,您不能直接在 main activity 的 onCreate() 中执行此操作,而是需要等到布局设置完成后。有关如何执行此操作的示例,请参阅 this question

另外,请参阅 this question 了解如何在代码中设置边距。