2011-01-17 13 views
4

Ich versuche, die Höhe einer Ansicht zu erhalten und es hält 0.android: get viewheight programmatisch

Rückkehr das ist, was ich versucht habe:

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

ich versuchte auch hourViewHeight = hourView.getHeight(); als gut, aber nicht Freude.

ich nenne diese beiden Linien in einer Methode initialize() hier zu finden:

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

hier ist mein 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 die Höhe des oben genannten XML-Layout erhalten möchten aber es gibt immer 0 zurück

edit: ich habe auch versucht, dies unten tun:

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

Antwort

1

Im ersten Beispiel es nicht, weil hat gearbeitet, wenn man sich abfragen, hat die Ansicht, die noch nicht das Layout und misst Schritte durchgeführt. Sie haben der Ansicht nur gesagt, wie sie sich im Layout "verhalten" würde, aber sie hat immer noch nicht berechnet, wo sie jede Ansicht platzieren sollen.

(ähnliche Frage: How to get the width and height of an android.widget.ImageView?)

Im zweiten Beispiel, das Sie geschrieben, ich glaube nicht, dass Sie den Blick auf die Aktivität hinzugefügt, so dass die Aktivität wird es nicht damit ziehen, werden Sie nie, dass die Log-Nachricht lesen . Rufen Sie setContentView oder addView zu einem Layout.

+0

danke. Du warst genau richtig. – jonney

-2

Sie haben die Höhe als wrap_content angegeben, und Sie füllen diesen Inhalt nicht. Aus diesem Grunde wird es angezeigt als 0

+0

Nun habe ich versucht, eine Höhe auf etwas wie 100dip und es gibt immer noch 0 – jonney

+0

geben Sie Höhe von linearlayout angeben? –

+0

ich benutze relativelayout wie im xml code oben gezeigt. Ich habe die Höhe selbst mit Android: layout_height = "50dip" angegeben und funktioniert immer noch nicht. Ich habe es auch versucht mit einem OnGlobalLayoutListener in den OnStart eingefügt und sogar das diddnt funktioniert. Warum ist es so viel harte Arbeit, nur um die Sichthöhe zurückzugeben! – jonney

6

versuchen

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

Ich glaube nicht, dass die '.measure' Methode notwendig ist, wenn dies in der GlobalLayoutListener ist, aber ich glaube, das ist genau so weit wie getMeasuredHeight() und getMeasuredWidth() anstelle der Standard getHeight() und getWidth() . – kcoppock

+0

Ich habe diesen Code versucht und es funktioniert mir, danke – AndroSco

Verwandte Themen