【问题标题】:Change View size to match content更改视图大小以匹配内容
【发布时间】:2015-10-29 08:42:10
【问题描述】:

我有一个扩展 View 的类 Token。我重写了 onDraw 方法来绘制两个矩形。之后,我想更改 Token 对象的大小以匹配矩形的大小。为了测试,我添加了一个 onClickListener,它应该打印出“Test”

    layout = (RelativeLayout) findViewById(R.id.layout);
    Paint p = new Paint();
    Token a = new Token(0,0, Token.ONE, p, this);
    layout.addView(a);
    a.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            System.out.println("test");
        }
    });

Token 类:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    tSize = canvas.getWidth()/Activity.SIZE;
    paint.setColor(Color.BLACK);
    r.set(0, 0, tSize, tSize);
    canvas.drawRect(r, paint);
    r.set(tSize, 0, 2 * tSize, tSize);
    canvas.drawRect(r, paint);
    
}

到目前为止一切顺利。问题是它总是打印出“测试”,无论我在屏幕上按哪里。我认为这是因为包含这两个矩形的视图是整个屏幕的大小。 所以我尝试了 LayoutParams:

setLayoutParams(new RelativeLayout.LayoutParams(tSize*2, tSize);

这导致矩形根本不显示(我认为它们变小了)。我尝试了其他一些数字:

setLayoutParams(new RelativeLayout.LayoutParams(600, 600);

这是有效的。 rects 出现,Listener 仅在 600x600 字段中工作。唯一的问题是矩形比我想要的要小。我的猜测是它们的大小与它们所在的视图的大小有关。

我如何实现我的视图完全是 (tSize*2, tSize) 并填充矩形?

【问题讨论】:

    标签: android android-layout view


    【解决方案1】:

    您可以覆盖onMeasure 方法来更改GameTokenView 的大小。

    【讨论】:

    • 在onMeasure 中使用setMeasuredDimension (width, height)
    • 一般来说,如果你想改变GameTokenView的大小,你只需覆盖onMeasure,setLayoutParams只控制你的childview的空间,onMeasure控制你的view的大小
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多