java - 为什么我的应用程序中的 View 大小没有动态变化?

标签 java android

我想通过按下按钮来更改 MyView 的大小。

MyView 的初始大小是 400 * 400,每次按下按钮 b1 时,w 都会增加 100。我认为 View 大小应该改变,但它仍然是 400 * 400。但是,如果我更改 ClickListener 中按钮 b2 的大小(添加行 a 和行 b),则b2MyView 的大小发生变化。我不知道这是怎么发生的。如果我只是想动态改变MyView的大小,我该怎么办?

相关代码:

public class MyView extends RelativeLayout {

Button b1;
Button b2;
Context sContext;
public static int i = 0;
private int w = 400;
private int h = 400;
private int w2 = 100;
private int h2 = 100;

public MyView(Context context) {
    super(context);
    sContext = context;
    init();
}

public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
    sContext = context;
    init();
}

private void init() {
    b1 = new Button(sContext);
    b2 = new Button(sContext);
    addView(b1);
    addView(b2);
    b1.setBackgroundColor(Color.YELLOW);
    b2.setX(500);

    b1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (MyView.this.getLayoutParams() == null) {
                MyView.this.setLayoutParams(new FrameLayout.LayoutParams(w, h));
            } else {
                MyView.this.getLayoutParams().width = w;
                MyView.this.getLayoutParams().height = h;
            }

                MyView.this.setBackgroundColor(Color.GREEN);


            //b2.setWidth(w2);          line a
            //b2.setHeight(h2);         line b

            //MyView.this.invalidate();
            w += 100;
            w2 += 20;
        }

    });
}

@Override
protected void onDraw(Canvas canvas) {
    //super.onDraw(canvas);
    test();
}

private void test() {
    b2.setBackgroundColor(Color.BLUE);
    b2.setX(200.0f);
    Toast.makeText(sContext, ""+i, Toast.LENGTH_SHORT).show();
    ++i;
}

}

最佳答案

我注意到一些奇怪的事情

1) //MyView.this.invalidate() 被注释掉。更改布局时,您需要调用 invalidate()revalidate()

2) 我不确定您为什么使用 MyView.this - 尝试仅使用 this。我唯一一次看到 Classname.this 是当您位于内部类中并且需要访问外部类时(请参阅 this )。 MyView 不是内部类。

3) //super.onDraw(canvas) 被注释掉。使用 java 绘图/绘画覆盖,您几乎总是希望调用 super 来确保子容器和父容器也收到重绘消息。

关于java - 为什么我的应用程序中的 View 大小没有动态变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17528757/

相关文章:

java - getResourceAsStream(file) 在哪里搜索文件?

java - 我们如何使用 xml 将空值发送到数据库?

Java:编码解码为.properties格式?

java - 尝试测试 SQLiteOpenHelper 但 getWritableDatabase() 抛出 Null

java - 身份验证后重定向到 protected 页面

JavaFX TextArea 删除快捷方式 Ctrl+Z 的默认撤消操作

java - Android - 将对象保存到 SharedPreferences 并在应用程序中的任何位置获取它

android - Android 相机预览中的 Phonegap 叠加图像

java - ADT - intelatom 无法选择

android - Calendar.MONTH 给出了错误的值