Cod*_*lan 15 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));
Run Code Online (Sandbox Code Playgroud)
投
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
Run Code Online (Sandbox Code Playgroud)
我在网上看到其他笔记尝试使用LinearLayout.LayoutParams,但这似乎没有帮助.
如果你想知道为什么我这样做而不只是在XML中设置它因为我看到一些奇怪的地方布局"跳转"到一个换行/换行.我在XML中将其设置为fill_parent/fill_parent,并将视图"缩小"滚动到看似包装/换行的内容.它真的很奇怪.看着foursquared的android源代码,我找到了一条评论,其中开发人员说同样的事情:
"虽然布局参数有些奇怪.如果我们没有明确地将布局设置为在充气后填充/填充,布局会跳转到换行/换行布局." (FriendsActivity.java:258)
这听起来就像我的问题,因此我试图做同样的事情(通过代码设置布局),但在他的情况下,他使用的是LinearLayout,而我使用的是RelativeLayout.
我错过了什么?提前致谢.
Rom*_*Guy 70
布局参数必须是父类型.因此,如果要创建RelativeLayout并将其添加到ListView,则布局参数必须是ListView.LayoutParams类型,而不是RelativeLayout.LayoutParams.正确的方法是以这种方式调用inflate:
膨胀(R.layout.mylayout,theListView,false);
这个版本的inflate()将正确地夸大XML中定义的布局参数(android:layout_*).