国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

GridLayout 居中顯示

2019-11-06 09:47:13
字體:
來源:轉載
供稿:網友

GridLayout 居中顯示

如果大家有使用過GridLayout來給RecyclerView使用,會發現其實是沒有居中的,而官方也沒有給出居中的方法,這里就講講如何讓其居中。

原理

要做的這一點其實很簡單,只要我們自己計算每一個item的寬度即可。例如三列的結構,如果在寬度較小的情況下,會靠在左邊顯示,導致不居中,我們也不可能自己對著屏幕測量然后在xml中設置合適的寬度,這些工作應該由代碼來為我們完成。由代碼計算出合適的寬度值,然后賦予我們的item,這樣item的寬度相同并且平分了屏幕就完成了居中的效果。

設置item寬度

看了上面的原理,所以實現居中有兩個操作,第一個是我們能夠設置item的寬度,第二個是計算item的寬度。我們先來進行設置寬度的代碼編寫。

對于item的管理,我們都知道是適配器完成的,所以對于寬度的管理我們也是在適配器中實現的。在設配器中定義一個私有變量 mItemWidth ,用于保存item的寬度,當我們計算完item的寬度后,來保存在這個變量中。對于一個item的寬度改變應該怎么做?很顯然,是使用LayoutParams來動態改變item的寬度。那應該在哪修改呢?對適配器熟悉的同學,應該就會馬上意識到在 onCreateViewHolder 這一函數中修改即可。

public void setItemWidth(int width) { mItemWidth = width;}@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.all_route_item, parent, false); ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); layoutParams.width = mItemWidth; view.setLayoutParams(layoutParams); return new ViewHolder(view); }

這樣的話,動態設置item的寬度,我們就完成了。

計算item寬度

這一步很簡單,只用四則運算就可以了,但是有一個地方需要注意。我們只用在給recyclerview設置適配器的時候,調用適配器setItemWidth 函數并傳入item的寬度值即可。

adapter.setItemWidth((int) ((recyclerview.getWidth()) / columns));

但是,有些同學會發現使用了之后,沒有效果。如果出現了沒有效果的情況,可以嘗試輸出recyclerview.getWidth的值,如果是0的話,就明白了。寬度高度為0,這怎么可能?事實上,如果遇到這種情況的同學就會明白,是因為控件還沒有還沒有完成繪制,你必須等待系統將繪制完View時,才能獲得。

那應該如果獲得到寬度呢?有幾個方法,這里我只介紹我覺得最簡單的一種方法:將一個runnable添加到Layout隊列中:View.post()。因為runnable對象中的方法會在view的measure、layout等事件后觸發。所以我們只用在runnable中設置適配器即可。

recyclerview.post(new Runnable() { @Override public void run() { GridLayoutManager layoutManager = new GridLayoutManager(mContext, columns); routeItems.setLayoutManager(layoutManager); Adapter adapter = new RoutesAdapter(array); adapter.setItemWidth((int) ((recyclerview.getWidth()) / columns)); recyclerview.setAdapter(adapter); } });

其他方法可以參考:http://www.cnblogs.com/kissazi2/p/4133927.html

這樣的話,居中就大功告成了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平塘县| 浠水县| 银川市| 长沙市| 岑溪市| 沅江市| 泰州市| 四平市| 慈利县| 嘉黎县| 玉山县| 西丰县| 东乌珠穆沁旗| 肇源县| 靖远县| 合肥市| 舟山市| 晋宁县| 鸡西市| 恩平市| 夏邑县| 舒城县| 永清县| 洛宁县| 甘肃省| 金山区| 兴国县| 昭平县| 台北县| 炎陵县| 应城市| 盐边县| 肇庆市| 天长市| 阿荣旗| 海南省| 武鸣县| 玛纳斯县| 万年县| 伊川县| 瑞安市|