我正在构建一个UI,并且都是在XML中静态定义的。它的所有位置都具有重量,虽然看起来正确,但我想看到所有东西实际上都具有正确的高度。问题是,无论我在哪里为格式布局调用.getHeight(),都得到0。我在onCreate()和onStart()中都尝试过。一样。也会发生所有UI对象。任何想法?
package com.app.conekta; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Window; import android.widget.Button; import android.widget.FrameLayout; import android.widget.Toast; public class Conekta extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public void onStart() { super.onStart(); } @Override public void onResume() { super.onResume(); FrameLayout fl1 = (FrameLayout) findViewById(R.id.headerFrameLayout); FrameLayout fl2 = (FrameLayout) findViewById(R.id.footerFrameLayout); Button b=(Button) findViewById(R.id.searchButton); Log.d("CONEKTA", String.valueOf(b.getHeight())); } }
XML:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <FrameLayout android:id="@+id/headerFrameLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.05" android:background="#597eAA" > <ImageView android:id="@+id/logoImage" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#7ba1d1" android:src="@drawable/logo_conekta" /> </FrameLayout> <LinearLayout android:id="@+id/bodyLinearLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.7" android:background="#f3f3f3" android:orientation="horizontal" > <FrameLayout android:id="@+id/leftBlankFrameLayout" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="0.15" android:background="#f3f3f3" >
简而言之,视图尚未在onCreate(),onStart()或onResume()中构建。由于它们在技术上不存在(就ViewGroup而言),因此它们的尺寸为0。
总而言之,您可以在这里找到有关如何处理的更好说明。
它为0,因为在onCreate和onStart中,该视图实际上都尚未绘制。你可以通过侦听实际绘制视图的时间来解决此问题:
final TextView tv = (TextView)findViewById(R.id.venueLabel); final ViewTreeObserver observer= tv.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { tv.getHeight() observer.removeGlobalOnLayoutListener(this); } });
那里有删除监听器的调用,以防止在布局更改上重复调用自定义处理程序…如果要获取这些,则可以省略。