我有一个主LinearLayout
和两个RecyclerView
作为孩子,需要获得第二个RecyclerView
的身高尺寸
我试过rv_show_adv.getHeight()
和rv_show_adv.getLayoutParams().height
,但是让我0
但是当我在真实设备中测试应用时,我可以看到我有两个高度和宽度,但为什么在java代码中我总是得到0
像素!
/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:id="@+id/mainlinear"
android:orientation="vertical"
tools:context=".main.MainActivity"
android:background="#f3cdcd"
android:weightSum="1"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="55dp"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_selected_adv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_show_adv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#b9f1ce"
android:layout_weight="1">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
真的很困惑,因为当我有一个视图(如TextView
)时我可以通过View.getHeight()
获得高度,但是当我有一个ViewGroup
时为什么不工作
我还尝试通过LinearLayout
获得主LinearLayout.getChildAt(1).getHeight()
的第二个孩子的身高,但再次得到0
还尝试在onCreate()
中定义RecyclerView变量,并希望在onResume()
生命周期中获得高度,但不能有所不同!
我想我会错过我的代码中的某些东西你有什么建议吗?
答案 0 :(得分:1)
由于View.getHeight()
上的onCreate
为0,因此在onCreateView上查看需要onMeasure()
,因此onMeasure()
之后可能onCreated
完成,您应该这样做这样:
int mWidth , mHeight ;
rv_show_adv.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
rv_show_adv.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
rv_show_adv.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
mWidth = rv_show_adv.getWidth();
mHeight = rv_show_adv.getHeight();
}
});