为RelativeLayout内的膨胀视图设置参数,但出现类广播异常

2023-12-27

您好,我正在尝试使用充气器以编程方式添加布局(它是一个简单的 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嵌套在滚动视图中,但我不明白为什么它会这样做,因为我添加的视图的直接父级是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);

如果您使用非空View作为根inflate()方法View返回的实际上是View作为方法中的根传递。所以,就你的情况而言view is the _innerLayout RelativeLayout作为父母有一个ScrollView,这是FrameLayout(这将解释LayoutParams).

因此,要么使用当前的 inflate 方法,但在返回的视图中查找视图:

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):

View view = inflater.inflate(R.layout.comments, _innerLayout, false);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.BELOW, R.id.commentsHeader);
view.setLayoutParams(params);
_innerLayout.addView(view);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为RelativeLayout内的膨胀视图设置参数,但出现类广播异常 的相关文章

随机推荐