我有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
}
请告诉我如何检测视图的高度?
答案 0 :(得分:2)
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 :(得分:2)
这是因为在调用onCreate()
时仍未测量和布置视图树。
如果api&lt; 11使用view.getViewTreeObserver().addOnGlobalLayoutListener()
否则使用view.addOnLayoutChangeListener()
。
在两种情况下都要记得删除听众。
答案 2 :(得分: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();
}
});