首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展覆盖onMeasure()的视图

扩展覆盖onMeasure()的视图
EN

Stack Overflow用户
提问于 2016-03-07 02:33:15
回答 2查看 655关注 0票数 0

我有一个视图view1,它扩展了FrameLayout并像这样覆盖了onMeasure(),因此它被呈现为一个正方形:

代码语言:javascript
复制
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, widthMeasureSpec);
  }

现在我想要创建另一个视图view2,它扩展了view1,但是现在我希望view2有一个与父视图相等的高度,从而覆盖整个屏幕。从现在起,我也把它当作正方形。

我怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-07 02:51:20

意见1:

代码语言:javascript
复制
private boolean measureAsSquare = true;

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    if (measureAsSquare) {
        super.onMeasure(widthMeasureSpec, widthMeasureSpec);
    }
    else {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

public void setMeasureAsSquare(boolean b) {
    measureAsSquare = b;
}

在View2构造函数中,子类视图1:

代码语言:javascript
复制
public View2(Context c) {
    setMeasureAsSquare(false);
}

然后,可以使用视图2的正常布局权重和高度来指定其首选大小。

票数 1
EN

Stack Overflow用户

发布于 2016-03-07 03:05:23

由于onMeasure for Square已经被覆盖,因此它忽略了传递给它的高度,按照您的代码:

代码语言:javascript
复制
@Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, widthMeasureSpec);
  }

做你想做的事情的一种方法-- view2,它扩展了view1,但现在我希望view2有一个与父级相等的高度,从而覆盖整个屏幕--也就是重写view2的onMeasure,像这样调用setDimension .

代码语言:javascript
复制
public class Square2 extends Square {

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

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
    }
}

这是我试用后的样品。(对于Square View中的代码,我只是在onMeasure中复制了您的代码)。

使用正方形:

对于Squre2:

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35835277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档