1. 程式人生 > >Android RecycleView設定頭部或者底部檢視,給固定高度失效問題

Android RecycleView設定頭部或者底部檢視,給固定高度失效問題

先上程式碼:

    private void setAdapter() {
        setData();

        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mAdapter = new MsgDetailAdapter(datas);
        mRecyclerView.setAdapter(mAdapter);
        setAdapterFootView();
    }

    private void setAdapterFootView(){
        View view = getLayoutInflater().inflate(R.layout.foot_msg_detail,null
); mAdapter.addFooterView(view); }

foot_msg_detail:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="100dp"
    android:background
="@color/msg_detail_activity_bg" >
</LinearLayout>

效果圖:
這裡寫圖片描述

這段程式碼的意思就是,給RecycleView添加了一個高度100dp 的FootView 發現並沒有效果

原因:
LayoutInflater大家都不陌生,使用上值得注意的是,呼叫兩個引數的構造方法,與三個引數的構造方法,原始碼我就不貼出來了,直接上結果:

如果你呼叫的是兩個引數的方法

 View view = getLayoutInflater().inflate(R.layout.foot_msg_detail,null);

那麼你給控制元件指定的寬、高都會成為wrap_content,也就是說width=”50dp” height=”20dp” 這種程式碼會失效

反之使用:

View view = getLayoutInflater().inflate(R.layout.foot_msg_detail,parentView,false);

指定控制元件的寬、高就不會失效。

so~ 解決方式:

    private void setAdapterFootView(){
        ViewGroup parentView = (ViewGroup) getWindow().getDecorView();
        View view = getLayoutInflater().inflate(R.layout.foot_msg_detail,parentView,false);
        mAdapter.addFooterView(view);
    }

方式很簡單,也就是得到當前Activity的根佈局
什麼是根佈局:

這裡寫圖片描述

這個很清楚了,系統會給ContentView套一層 FrameLayout

ViewGroup parentView = (ViewGroup) getWindow().getDecorView();

得到的就是這個FrameLayout

Ok 上修改後的效果圖:
這裡寫圖片描述

可以看見底部的footView設定的高度已經出來了,headView也同理。都是些基礎知識~~好吧原諒我發這篇blog就是為了記住

ViewGroup parentView = (ViewGroup) getWindow().getDecorView();

這個方法 O(∩_∩)O哈哈~