How to set width and height for custom view in programmatically?
Asked Answered
M

3

7

I have created a custom view named MyDraw ,this is my MyDraw code,

public class MyDraw extends View {


    public MyDraw(Context context) {
        super(context);

    }

    public MyDraw(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }

    public MyDraw(Context context, AttributeSet attrs) {
        super(context, attrs);

    }
         ........................................
}

I have added the view in XML file using package name. It is working fine. Now I want to set height and width for the MyDraw in run time,for that i have used following code,

mMyDraw.setLayoutParams(new LayoutParams(220, 300));

but i got Exception like,

java.lang.ClassCastException: android.view.ViewGroup$LayoutParams

How to solve this exception? please help me..

Mcphee answered 19/12, 2011 at 6:57 Comment(1)
Possible duplicate of Android set height and width of Custom view programmaticallyFiring
Y
11

Override the onMeasure() method, have a look here

Yamashita answered 19/12, 2011 at 7:2 Comment(0)
C
22

You must override the onMeasure() method of the View.

For a nice example you can check here: http://kahdev.wordpress.com/2008/09/13/making-a-custom-android-button-using-a-custom-view/

And a very cool video that I would recommend is here: http://marakana.com/forums/android/general/563.html

Hope this helps!

Custumal answered 19/12, 2011 at 7:7 Comment(4)
Isn't it the same answer as mine? Do you think adding some other link is making it different answer?Yamashita
When started writing the answer, you hadn't answer yet. If you feel better if I remove the answer I have no problem. In any case the user can vote your answer.Custumal
If you think you need not to remove the answer I've no problem. In fact a lot of time I faced same thing (Someone answered while I was writing the same) :)Yamashita
Adding extra links does help indeed. Look at the vote count :)Lydie
Y
11

Override the onMeasure() method, have a look here

Yamashita answered 19/12, 2011 at 7:2 Comment(0)
W
1

There is a simple way: based on our custom view parent class we can use layout param.

for example if our custom view is extended from FrameLayout:

FrameLayout.LayoutParams params = (LayoutParams) findViewById(R.id.root).getLayoutParams();
params.width = newwidth;
params.height = newHeight;
setLayoutParams(params);

where "R.id.root" is id of our root view in custom_view.xml that in this case is FrameLayout.

Witticism answered 7/1, 2020 at 14:27 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.