Android RecycleView設定頭部或者底部檢視,給固定高度失效問題
阿新 • • 發佈:2019-01-29
先上程式碼:
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哈哈~