以编程方式设置RelativeLayout布局参数 – 抛出ClassCastException

我从XML膨胀一个RelativeLayout,然后尝试以编程方式设置其布局参数,并收到一个ClassCastException。

码:

profileHeader = (RelativeLayout)mInflater.inflate(R.layout.user_profile_header, null); profileHeader.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT)); 

 E/AndroidRuntime( 2963): java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams E/AndroidRuntime( 2963): at android.widget.ListView.measureScrapChild(ListView.java:1119) E/AndroidRuntime( 2963): at android.widget.ListView.measureHeightOfChildren(ListView.java:1202) E/AndroidRuntime( 2963): at android.widget.ListView.onMeasure(ListView.java:1111) E/AndroidRuntime( 2963): at android.view.View.measure(View.java:8222) E/AndroidRuntime( 2963): at android.view.ViewGroup.measureChildWithMargins(V 

我已经看到网上的其他笔记尝试使用LinearLayout.LayoutParams,但似乎没有帮助。

如果你想知道为什么我这样做,而不是只是把它设置在XML中,因为我看到一些奇怪的地方,布局“跳转”到包装/包装。 我把它设置为fill_parent / fill_parent在XML和滚动视图“缩小”看来是包装/包装。 它真的很奇怪。 看着四维的Android源代码,我发现了一个评论,开发人员说同样的事情:

“虽然布局参数有些奇怪,但如果我们没有明确地将布局设置为在填充之后进行填充/填充,则布局会跳转到包装/包装布局。 (FriendsActivity.java:258)

这听起来就像我的问题,因此我试图做相同的(通过代码设置布局),但在他的情况下,他使用LinearLayout,而我使用RelativeLayout。

我错过了什么? 提前致谢。

Solutions Collecting From Web of "以编程方式设置RelativeLayout布局参数 – 抛出ClassCastException"

布局参数必须是父types。 所以如果你正在创build一个RelativeLayout并将其添加到一个ListView中,那么布局参数必须是ListView.LayoutParamstypes,而不是RelativeLayout.LayoutParamstypes。 正确的方法是这样调用inflate:

膨胀(R.layout.mylayout,ListView,false);

这个版本的inflate()将正确地膨胀在XML中定义的布局参数(android:layout_ *)。

如果你的视图是在一个ListView中,你必须使用AbsListView.LayoutParams

另请参阅: 无法使用自定义适配器在ListView中设置项目的边距