Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android: get viewHeight programmatically

Tags:

android

i am trying to get the height of a view and it keeps returning 0.

this is what i have tried:

View hourView = View.inflate(mContext, R.layout.calendar_hour_item,null);
hourViewHeight = hourView.findViewById(R.id.mainLayout).getHeight();

i also tried hourViewHeight = hourView.getHeight(); as well but no joy.

i call those two lines inside a initialize() method located here:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.calendar_day_screen);

        Intent intent = getIntent();

        mDate = new DateTime(intent.getStringExtra("date"));
        circleIcon = (ImageView) findViewById(R.id.circle);

        mHoursLayout = (RelativeLayout) findViewById(R.id.dayLayout);

        TopBarUtil topBar = new TopBarUtil(getApplicationContext());

        circleIcon.setOnClickListener(topBar.onActionClickListener());

        mContext = getApplicationContext();



        initialize();
    }

here is my xml layout:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:id="@+id/mainLayout" android:background="@layout/border">

    <TextView android:text="12am" android:id="@+id/hourTextView"
        android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</RelativeLayout>

i basicllay want to get the height of the above xml layout but it always returns 0.

edit: i have also tried doing this below:

@Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();

         final View hourView = View.inflate(mContext, R.layout.calendar_hour_item,null);
        ViewTreeObserver observer = hourView.getViewTreeObserver();

        observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

            @Override
            public void onGlobalLayout() {
                hourView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                hourViewHeight = hourView.getHeight();
                Log.d(TAG, "hourViewHeight = " + hourViewHeight);
            }
        });

//      hourViewHeight = hourView.findViewById(R.id.mainLayout).getHeight();
//      Log.d(TAG, "hourViewHeight = " + hourViewHeight);
    }
like image 935
Jonathan Avatar asked Jan 17 '11 11:01

Jonathan


People also ask

How do you find the height of a view?

These dimensions define the actual size of the view on screen, at drawing time and after layout. These values may, but do not have to, be different from the measured width and height. The width and height can be obtained by calling getWidth() and getHeight(). Save this answer.


2 Answers

try

hourView.measure(hourView.getWidth(), hourView.getHeight());
hourView.getMeasuredHeight()
like image 80
Rubycon Avatar answered Sep 27 '22 17:09

Rubycon


In the first example it didn't worked because when you are querying them, the view still haven't performed the layout and measure steps. You only told the view how it would "behave" in the layout, but it still didn't calculated where to put each view.

(Similar question: How to get the width and height of an android.widget.ImageView?)

In the second example you posted, I don't think you added the view to the activity so the activity won't draw it hence, you will never read that log message. call setContentView or addView to some layout.

like image 41
Pedro Loureiro Avatar answered Sep 27 '22 18:09

Pedro Loureiro