2011-01-17 3 views
4

я пытаюсь получить высоту точки зрения, и он продолжает возвращаться 0.андроид: получить viewHeight программно

это то, что я пробовал:

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

я также пытался hourViewHeight = hourView.getHeight(); как хорошо, но нет радость.

я называю эти две строки внутри метода Initialize(), расположенный здесь:

@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(); 
    } 

вот мой XML макет:

<?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> 

я basicllay хочу, чтобы получить высоту выше макета XML но он всегда возвращает 0.

редактирование: я также пробовал сделать это ниже:

@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); 
    } 

ответ

1

В первом примере это не сработало, потому что, когда вы запрашиваете их мнение до сих пор не выполнили макет и измерения шагов. Вы только сказали, как он будет «вести себя» в макете, но он все еще не рассчитал, где поставить каждое представление.

(Похожий вопрос: How to get the width and height of an android.widget.ImageView?)

Во втором примере вы в курсе, я не думаю, что вы добавили вид деятельности, поэтому активность не привлечет его, следовательно, вы никогда не читали, что сообщение журнала , позвоните по телефону setContentView или addView.

+0

спасибо. вы были на месте. – jonney

-2

Вы указали высоту как wrap_content, и вы не заполните этот контент. Из-за того, что она будет отображаться как 0.

+0

Ну, я попытался определить высоту на чем-то вроде 100dip, и он все равно возвращает 0 – jonney

+0

, вы указываете высоту linearlayout? –

+0

im, используя relativelayout, как показано в приведенном выше коде xml. Я сам задал высоту с помощью android: layout_height = "50dip" и все еще не работает. Я также попробовал это с помощью OnGlobalLayoutListener, вставленного в onStart, и даже это diddnt работает. почему так тяжело работать, чтобы вернуть высоту взгляда! – jonney

6

попробовать

hourView.measure(hourView.getWidth(), hourView.getHeight()); 
hourView.getMeasuredHeight() 
+0

Я не думаю, что метод '.measure' необходим, если это находится в GlobalLayoutListener, но я считаю, что это то место, которое использует getMeasuredHeight() и getMeasuredWidth() вместо стандартных getHeight() и getWidth() , – kcoppock

+0

Я пробовал этот код, и он работает со мной, спасибо – AndroSco

Смежные вопросы