我正在从 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 中设置它,因为我看到布局“跳转”到换行/换行的地方有些奇怪。我在 XML 中将其设置为 fill_parent/fill_parent 并在 ScrollView 时“收缩”到看起来是 wrap/wrap 的内容。它真的很奇怪。查看foursquared android源代码,我发现开发人员说了同样的话:
“虽然布局参数发生了一些奇怪的事情。如果我们没有明确地将布局设置为填充/填充后填充,布局会跳转到环绕/环绕布局。” (FriendsActivity.java:258)
这听起来就像我的问题,因此我正在尝试做同样的事情(通过代码设置布局),但在他的情况下,他使用的是 LinearLayout,而我使用的是 RelativeLayout。
我错过了什么?提前致谢。
最佳答案
布局参数必须是父级的类型。因此,如果您要创建 RelativeLayout 并将其添加到 ListView,则布局参数必须是 ListView.LayoutParams 类型,而不是 RelativeLayout.LayoutParams。正确的做法是这样调用 inflate:
inflate(R.layout.mylayout, theListView, false);
这个版本的 inflate() 将正确地膨胀 XML 中定义的布局参数 (android:layout_*)。
关于android - 以编程方式设置 RelativeLayout 布局参数 - 抛出 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4631966/