最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解RecyclerView設(shè)置背景圖片長(zhǎng)寬一樣(以GridLayoutManager為例)

 更新時(shí)間:2017年12月15日 11:39:12   作者:Bthsky  
這篇文章主要介紹了詳解RecyclerView設(shè)置背景圖片長(zhǎng)寬一樣(以GridLayoutManager為例),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

使用RecyclerView的過(guò)程中,由于設(shè)置了LayoutManager的關(guān)系,控件(的background)往往不能通過(guò)指定長(zhǎng)寬為match_parent、wrap_content來(lái)實(shí)現(xiàn)長(zhǎng)寬大小相同。

面對(duì)的問(wèn)題:

以指定GridLayout(Horizental)布局為例:控件的實(shí)際寬度受制于一行分割為幾列,粗略來(lái)說(shuō) 寬度 = RecyclerView寬度 ÷ 列數(shù) 由于這個(gè)過(guò)程是運(yùn)行時(shí)確定的,長(zhǎng)度預(yù)先并不知道寬度的確切值,這會(huì)造成長(zhǎng)寬不匹配的現(xiàn)象(如圖)

pre

圖中l(wèi)ogo的寬度嚴(yán)格限制在GridLayout的每一小格的寬度范圍內(nèi),長(zhǎng)度(在沒(méi)有父控件的限制下)為初始值。

這里的初始值有兩個(gè)含義:

①在layout布局文件中指定了長(zhǎng)度為“xxdp”等確定值。

②長(zhǎng)度指定為“wrap_content” —— 當(dāng)背景為矢量圖,長(zhǎng)度為對(duì)應(yīng)drawable文件中確定的android:height ;當(dāng)背景為點(diǎn)陣圖,長(zhǎng)度為該圖分辨率的寬度。

這就使得我們看到的實(shí)際效果不是拉成了瘦瘦高高的長(zhǎng)竹竿,就是壓縮成了矮矮胖胖的矮冬瓜。

我們當(dāng)然可以在調(diào)試時(shí)得到控件寬度,再指定其為logo的長(zhǎng)度。這樣在調(diào)試機(jī)器上看起來(lái)確實(shí)長(zhǎng)寬相等了,但這真的解決了根本問(wèn)題嗎?

我們的軟件要運(yùn)行在多種分辨率的屏幕下,死板的規(guī)定長(zhǎng)度必然使得在部分機(jī)型下長(zhǎng)寬失衡。

因此解決這個(gè)問(wèn)題治標(biāo)治本的手段在于根據(jù)logo的實(shí)際寬度來(lái)確定長(zhǎng)度,令height = width。

怎么求寬度?

接下來(lái)就是如何獲取width的問(wèn)題了。

根據(jù)上面的公式 寬度 = recyclerView的寬度 ÷ 列數(shù)且recyclerView寬度 = gridLayoutManager.getWidth();列數(shù) = gridLayoutManage.getSpanCount();

我們可以輕松獲得width = gridLayoutManager.getWidth()/gridLayoutManage.getSpanCount();

當(dāng)然,為了得到gridLayoutManager實(shí)例,我們需要將它作為RecyclerAdapter構(gòu)造方法中的參數(shù)傳入:

public RecyclerSysWebAdapter(Context context, ArrayList<IndexItem> list, OnItemClickListener listener,GridLayoutManager glm) { 
    this.list = list; 
    this.context = context; 
    this.listener = listener; 
    this.glm = glm; 
}

recyclerView調(diào)用方代碼如下:

GridLayoutManager glm_sys = new GridLayoutManager(getContext(),7);//分為7列 
recycler_sys.setLayoutManager(glm_sys); //設(shè)置布局管理器 
recycler_sys.setAdapter(new RecyclerSysWebAdapter(getContext(),item_list_sys,onItemClickListener_sys,glm_sys)); 

接下來(lái)就是在RecyclerAdapter中指定logo的長(zhǎng)度為該值就行啦:

public void onBindViewHolder(SysWebHolder holder, final int position) { 
    ...//這里省略處理獲取button實(shí)例的代碼 
    ViewGroup.LayoutParams parm = holder.button_img.getLayoutParams(); //獲取button背景的LayoutParams實(shí)例 
    parm.height = glm.getWidth()/glm.getSpanCount() 
        - holder.button_img.getPaddingLeft(); 
} 

在這里順便提一下LayoutParams類(lèi)。該類(lèi)通過(guò)指定width \ height 向父布局說(shuō)明自己想要的尺寸信息,父布局將根據(jù)該信息盡可能滿(mǎn)足它。

好了,這樣一來(lái)我們成功的使得logo長(zhǎng)寬相等嘍!

還有一件事

你以為這樣就結(jié)束了?是不是還忘了點(diǎn)什么?

我們來(lái)看一下上述設(shè)置的實(shí)際效果:

mid

哎哎哎!雖然效果有改善,怎么還是長(zhǎng)方形的?!

靜下心仔細(xì)想一下,我們獲取的寬度真的是logo的寬度嗎?

detail

剛才算出來(lái)的值怎么看都像是①號(hào)距離啊喂!

我們?cè)谠O(shè)計(jì)布局時(shí)為了美觀(guān)往往需要對(duì)控件設(shè)置 marginpadding 讓彼此間保持一定的距離。我們?cè)讷@取寬度時(shí)當(dāng)然也要考慮到這個(gè)因素了!

獲取margin的具體值代碼如下:

ViewGroup.LayoutParams parm = holder.button_img.getLayoutParams(); 
((ViewGroup.MarginLayoutParams)parm).leftMargin; 

我們需要顯式地將 layoutParams 實(shí)例轉(zhuǎn)換為 MarginLayoutParams方能獲取作為成員變量margin值。

這里獲取margin值參考自這篇文章:http://blog.csdn.net/yunxiaoxiaoyun/article/details/22314407點(diǎn)擊打開(kāi)鏈接

獲取padding代碼如下(默認(rèn)paddingLeft == paddingRight):

button.getPaddingLeft(); 

綜合起來(lái)代碼如下:

public void onBindViewHolder(SysWebHolder holder, final int position) { 
    ...//省略獲取button實(shí)例的代碼 
    ViewGroup.LayoutParams parm = holder.button_img.getLayoutParams(); 
    parm.height = glm.getWidth()/glm.getSpanCount() 
        - 2*holder.button_img.getPaddingLeft() - 2*((ViewGroup.MarginLayoutParams)parm).leftMargin;//margin為什么要乘以2留給你們思考一下 
} 

現(xiàn)在問(wèn)題徹底解決啦!我們觀(guān)察一下結(jié)果:

now

PS:差點(diǎn)忘了說(shuō),必須要注意的!

recycler_sys = act.findViewById(R.id.recycler_sys_website); 
GridLayoutManager glm_sys = new GridLayoutManager(getContext(),sys_column); 
recycler_sys.setLayoutManager(glm_sys); 
recycler_sys.setAdapter(new RecyclerSysWebAdapter(getContext() 
  ,item_list_sys,onItemClickListener_sys,glm_sys)); 

請(qǐng)注意我的調(diào)用順序?yàn)樵趕etLayoutManager()之后再調(diào)用setAdapter()。

若調(diào)換兩語(yǔ)句順序會(huì)導(dǎo)致設(shè)置的長(zhǎng)度失效!

具體機(jī)理未深究,我猜測(cè)原因在于setLayoutManager()的過(guò)程中會(huì)再次測(cè)量并確定各控件的長(zhǎng)寬,覆蓋之前的設(shè)置。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • RxJava+Retrofit實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求封裝的方法

    RxJava+Retrofit實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求封裝的方法

    Retrofit是當(dāng)前應(yīng)用非常廣泛的網(wǎng)絡(luò)請(qǐng)求框架,通常結(jié)合RxJava來(lái)進(jìn)行網(wǎng)絡(luò)請(qǐng)求,本文將展示一個(gè)采用RxJava+Retrofit的網(wǎng)絡(luò)請(qǐng)求demo,感興趣的可以了解一下
    2019-04-04
  • Android 解析JSON對(duì)象及實(shí)例說(shuō)明

    Android 解析JSON對(duì)象及實(shí)例說(shuō)明

    本篇文章小編為大家介紹,Android 解析JSON對(duì)象及實(shí)例說(shuō)明。需要的朋友參考下
    2013-04-04
  • Android自定義View旋轉(zhuǎn)圓形圖片

    Android自定義View旋轉(zhuǎn)圓形圖片

    這篇文章主要為大家詳細(xì)介紹了Android自定義View旋轉(zhuǎn)圓形圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Android PopupWindow實(shí)現(xiàn)微信右上角的彈出菜單

    Android PopupWindow實(shí)現(xiàn)微信右上角的彈出菜單

    這篇文章主要為大家詳細(xì)介紹了Android PopupWindow實(shí)現(xiàn)微信右上角的彈出菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Android圖片壓縮方法并壓縮到指定大小

    Android圖片壓縮方法并壓縮到指定大小

    本文給大家分享android圖片壓縮的三種方法并壓縮到指定大小,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-07-07
  • Android組件之DrawerLayout實(shí)現(xiàn)抽屜菜單

    Android組件之DrawerLayout實(shí)現(xiàn)抽屜菜單

    DrawerLayout組件同樣是V4包中的組件,也是直接繼承于ViewGroup類(lèi),所以這個(gè)類(lèi)也是一個(gè)容器類(lèi)。接下來(lái)通過(guò)本文給大家介紹Android組件之DrawerLayout實(shí)現(xiàn)抽屜菜單,感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • Android JetpackCompose使用教程講解

    Android JetpackCompose使用教程講解

    在今年的Google/IO大會(huì)上,亮相了一個(gè)全新的 Android 原生 UI 開(kāi)發(fā)框架-Jetpack Compose, 與蘋(píng)果的SwiftIUI一樣,Jetpack Compose是一個(gè)聲明式的UI框架
    2022-10-10
  • 詳解四種主要的Android依賴(lài)管理方式

    詳解四種主要的Android依賴(lài)管理方式

    Android應(yīng)用開(kāi)發(fā)涉及大量的依賴(lài)庫(kù)和第三方組件,因此有效地管理這些依賴(lài)關(guān)系至關(guān)重要,本文將介紹四種主要的Android依賴(lài)管理方式,分析它們的優(yōu)點(diǎn)、缺點(diǎn)以及最佳實(shí)踐,需要的朋友可以參考下
    2023-09-09
  • Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫(huà)效果(五)

    Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫(huà)效果(五)

    這篇文章主要為大家詳細(xì)介紹了Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫(huà)效果的第五篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android中RecyclerView點(diǎn)擊Item設(shè)置事件

    Android中RecyclerView點(diǎn)擊Item設(shè)置事件

    這篇文章主要介紹了Android中RecyclerView點(diǎn)擊Item設(shè)置事件的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07

最新評(píng)論

上饶市| 长宁区| 句容市| 华池县| 墨玉县| 普洱| 晋城| 武山县| 余干县| 谢通门县| 读书| 吉木萨尔县| 德庆县| 孟津县| 开原市| 勐海县| 柘荣县| 高台县| 杂多县| 资兴市| 辛集市| 信丰县| 城口县| 新和县| 洛浦县| 泸定县| 当涂县| 江北区| 酉阳| 萝北县| 肇庆市| 郸城县| 宜宾县| 冷水江市| 武威市| 慈利县| 东阳市| 平乡县| 罗江县| 佛教| 南丰县|