在网上看了很多关于如何解决RecyclerView 的item填充屏幕的文章,但是看到的那些文章几乎方法都一样,还是无法解决到我的问题。但是看了那么多文章之后终于从一篇文章中找到了灵感,地址是:RecyclerView Item 布局宽高无效问题探究。这篇文章中探讨了为什么item无法填充屏幕的原因。非常感谢这位作者!
废话我就不多说 ,进入正题。我们获得一个布局的时候 无非就是用inflate方法,这个 方法有四个重载方法,一般来说我用的比较多的就是.inflate(R.layout.xx, parent, false);和.inflate(R.layout.xx,null)这两个方法,当我遇到item无法填充屏幕宽度的时候正是使用了第二个方法,于是我测试了第一个方法,解决了问题。通常我在使用Recycler View时,Item布局出问题,我就把两个方法都试过(前提是布局没问题),一般都可以解决掉,但是今天我要给RecyclerView添加一个HeaderView的时候,出现了HeaderView无法填充屏幕宽度的情况。我只能使用上面提到的方法中的第二种方法,因为我不知道怎么拿到父容器(我是菜鸟),具体代码如下
public void setFooterView(int resId) {
this.headerView=LayoutInflater.from(mContext).inflate(resId,null);
notifyItemInserted(0);
}
在这个时候我也没办法解决,我也很绝望,所以我不停的去网上看文章,后来看到了前面提到的那篇文章,才知道,假如使用.inflate(R.layout.xx,null)加载布局,没有父容器,得到的布局的宽高都是wrap_content的(不清楚的同学可以点链接进去看原因)。所以我在xml文件中怎么写宽度和高度都是无效的。于是我想到了一个很烂的办法解决这个问题。办法如下:
解决问题的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/grey"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/middle_margin"
android:layout_marginTop="@dimen/small_marginII"
android:text="热门城市"
android:textColor="@color/black"
android:textSize="@dimen/bigII_text_size" />
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_hotCity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/middle_margin"
android:layout_marginRight="@dimen/middle_margin"
android:layout_marginTop="@dimen/small_marginII">
</android.support.v7.widget.RecyclerView>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:layout_marginBottom="@dimen/small_margin"
android:layout_marginTop="@dimen/small_margin"
android:background="@color/textgrey" />
</LinearLayout>
这段代码中大家可以看到末尾处有一个View,解决问题的关键就在这个View上面。我的想法是:既然你不管怎么样都是wrap_content,那么我就把你撑到match_parent,于是我将View的宽度设置成match_parent,再次运行,发现我的headerview可以填充了。至此解决了我的问题。可能有人有疑惑为何我上面的textView是match_parent为何无法填充,具体我也不是很清楚,但是我觉得应该是它只测量字体所占宽度,才会导致这样的效果吧。这是我目前知道的办法,大神勿喷,如果谁有更好的办法希望能告知一下,不胜感激。