2015-10-10 4 views
1

У меня 2 макета:Как определить высоту представления?

main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <RelativeLayout 
     android:id="@+id/addhere" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
    </RelativeLayout> 

</ScrollView> 

a.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:layout_height="200dp" 
     android:layout_width="match_parent"/> 

</LinearLayout> 

и я хочу, чтобы раздуть макет a.xml и добавить его в группу просмотра с id addhere, а затем определить высоту представления. a.getHeight() дает мне 0.

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     View a = getLayoutInflater().inflate(R.layout.a,null); 
     ViewGroup b = (ViewGroup)findViewById(R.id.addhere); 
     b.addView(a); 
     Log.d("states", a.getHeight() + ""); // show me 0 

    } 

Пожалуйста, скажите мне, как я могу обнаружить высоту Высказаться?

ответ

1
a.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
    @Override 
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
     Log.d("states", "a's height: " + v.getHeight()); 
     a.removeOnLayoutChangeListener(this); 
    } 
}); 
1

Вы можете попробовать что-то вроде этого:

final View view=a; 
    view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() 
    { 
     @TargetApi(16) 
     @Override 
     public void onGlobalLayout() 
     { 
      if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) 
      { 
       view.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
      } 
      else 
      { 
       view.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
      } 

      final int width=view.getWidth(); 
      final int height=view.getHeight(); 
     } 
    }); 
1

Это потому, что вид дерева еще не измеряется и раскладывали в то время onCreate() называется.
Если api < 11 use view.getViewTreeObserver().addOnGlobalLayoutListener() .
Не забудьте удалить слушателя в обоих случаях.

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