您好我正在尝试使用inflater以编程方式添加布局(这是一个简单的TextView)。膨胀视图的父级是ScrollView中的RelativeLayout。我的问题是我正在尝试使用params.addRule和view.setLayoutParams()将新视图放在其标题下(在RelativeLayout中),但是我得到了一个转发异常:11-12 13:06:57.360: E/AndroidRuntime(10965): java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams
,甚至虽然视图的父级显然是RelativeLayout。有什么想法吗?
我在想它是因为RelativeLayout嵌套在scrollview中,但是我不明白为什么它会这样做,因为我添加的视图的直接父级是RelativeLayout。
_innerLayout = (RelativeLayout) findViewById(R.id.innerRelativeLayout);
LayoutInflater inflater = (LayoutInflater)this.getLayoutInflater();
View view = inflater.inflate(R.layout.comments, _innerLayout);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.BELOW, R.id.commentsHeader);
view.setLayoutParams(params);
答案 0 :(得分:5)
如果使用非View
作为inflate()
方法的根,则返回的View
实际上将是作为方法中的根传递的View
。因此,在您的情况下,view
是_innerLayout
RelativeLayout
,其父作为ScrollView
,是FrameLayout
的扩展名(将解释{ {1}})。
因此要么使用当前的inflate方法,要在返回的视图中查找视图:
LayoutParams
或使用其他版本的View view = inflater.inflate(R.layout.comments, _innerLayout);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.BELOW, R.id.commentsHeader);
(view.findViewByid(R.id.theIdOfTextView)).setLayoutParams(params);
(不附加充气视图并手动将其与正确的inflate()
一起添加):
LayoutParams