感谢您的评论。
这是我的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>
答案 0 :(得分:0)
将您的SquareView
课程更改为RelativeLayout
而不是View
。
如果您更改了如下所示的activity_main.xml,请移除LinearLayout
并将SquareView
的宽度和高度设置为fill_parent
,否则广场将不会消失:< / p>
<?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
的大小在代码中设置边距。但是,您不能直接在主活动中的onCreate()中执行此操作,但需要等到布局完成后才能设置。有关如何执行此操作的示例,请参阅this question。
另外,请参阅this question了解如何在代码中设置边距。