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

标签 android android-layout

我正在从 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/

相关文章:

java - 他们是如何在 Android 上制作 imo/ebuddy 应用程序的?

android - 如何在android中的布局内创建自定义菜单?

Android布局并置顶

android - google-tv 模拟器似乎已启动,但随后什么也没做

android - Android Studio错误:(1,0)找不到ID为 'com.android.application'的插件

android - 如何在 React Native 中离线使用谷歌地图

Android NDK 字符数组初始化超过 1Mb

android - 如何以编程方式设置 android :button ="@null"?

java - 相对布局中的 ViewPager 消耗完整高度(选项卡)

android - FragmentContainerView 使用 findNavController