android 自定义FrameLayout,提供设置最大宽度与最大高度的接口与xml属性
时间: 2024-05-07 13:17:45 浏览: 240
Android自定义View设定到FrameLayout布局中实现多组件显示的方法 分享
首先,在自定义的FrameLayout类中添加以下代码:
```java
private int mMaxWidth = -1;
private int mMaxHeight = -1;
public void setMaxWidth(int maxWidth) {
mMaxWidth = maxWidth;
requestLayout();
}
public void setMaxHeight(int maxHeight) {
mMaxHeight = maxHeight;
requestLayout();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int measuredWidth = MeasureSpec.getSize(widthMeasureSpec);
int measuredHeight = MeasureSpec.getSize(heightMeasureSpec);
if (mMaxWidth > 0 && measuredWidth > mMaxWidth) {
measuredWidth = mMaxWidth;
widthMeasureSpec = MeasureSpec.makeMeasureSpec(measuredWidth, MeasureSpec.EXACTLY);
}
if (mMaxHeight > 0 && measuredHeight > mMaxHeight) {
measuredHeight = mMaxHeight;
heightMeasureSpec = MeasureSpec.makeMeasureSpec(measuredHeight, MeasureSpec.EXACTLY);
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
```
这里定义了两个变量mMaxWidth和mMaxHeight,分别表示最大宽度和最大高度。然后提供了set方法,用于设置最大宽度和最大高度。在onMeasure()方法中,对测量的宽高进行了判断,如果超过了最大宽高,则将其设置为最大宽高。
接下来,在attrs.xml文件中添加以下代码:
```xml
<declare-styleable name="MaxSizeFrameLayout">
<attr name="maxWidth" format="dimension" />
<attr name="maxHeight" format="dimension" />
</declare-styleable>
```
这里定义了两个自定义属性,分别表示最大宽度和最大高度。
最后,在xml布局文件中使用自定义FrameLayout时,可以通过以下方式设置最大宽度和最大高度:
```xml
<com.example.MaxSizeFrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:maxWidth="200dp"
app:maxHeight="200dp">
<!-- 内容布局 -->
</com.example.MaxSizeFrameLayout>
```
这里设置了最大宽度为200dp,最大高度也为200dp。注意,需要将app命名空间添加到根布局中。
阅读全文