android 如何自定義這樣的一個View已脓, 當時確實把我難到了

WechatIMG300.png

下面效果圖是工作中遇到的一個效果圖通殃,需要自定義控件來實現(xiàn)此功能。當時確實蒙了恨诱,不知道如何去實現(xiàn)骗炉。 當你看到這個效果圖后你有思路了嗎?, 有好的想法思路可以分享分享厕鹃, 看看我的這個做法是不是太復(fù)雜了

image.png

看到這個效果圖是不是太簡單乍丈, 但是產(chǎn)品的要求是 左邊的標題要與標題最長的一個右對齊 就這一個條件當時真把 我難住了, 目前的截圖里面只有有三個條件忆矛, 但是這里面的條目的個數(shù)是不確定的

  • 接下來分析一下我的思路请垛,看看我的這個思路如何?

如果能求出標題最長的控件的寬度宗收, 然后將其它標題的寬度也設(shè)置成最長標題的寬度。并設(shè)置gravity為right采驻, 是不是就能解決上面的這個問題了匈勋??

  • 如何求出最長標題的寬度的呢颓影? 這時候onMeasure方法就會登上用場了。

比如接口返回了10條數(shù)據(jù)碎浇, 那么需要求出10條數(shù)據(jù)里面標題最長的那一條標題的寬度 。
思路是: 自定義 一個控件繼承自LinearLayout, 在綁定數(shù)據(jù)的時候調(diào)用bind方法奴璃, 參數(shù)是一個List城豁, 然后遍歷List,每一個item對應(yīng)于上面的效果圖的一個字條目雳旅, 然后動態(tài)的創(chuàng)建一個子item添加進當前控件,在添加進父控件之前攒盈,先測量一下左邊title的寬度, 然后把寬度最大的值保存下來僵蛛。當所有的item都遍歷結(jié)束時,就能得到最大的標題寬度充尉。然后在遍歷一次當前控件的子item衣形, 將每一個標題的寬度強制改成求出來的最大寬度,并且gravity設(shè)置成 right就能解決上面的這個問題

  • 看一下我當前項目里面的核心代碼
 private fun addFundView(mDatas: List<IFundTopCategoryEntity>) {
        val widthMeaspec = MeasureSpec.makeMeasureSpec(ScreenUtils.getScreenWidth(), MeasureSpec.EXACTLY)
        val heightMeasureSpec = MeasureSpec.makeMeasureSpec(100, MeasureSpec.EXACTLY)

        mDatas.forEach {
            val view = LayoutInflater.from(context).inflate(R.layout.fund_view_top_category_item, this, false)
            val rateLineView = view.findViewById<View>(R.id.rate_line)
            (rateLineView.layoutParams as? LayoutParams)?.leftMargin = gap
            val drawable = LinearGradientDrawable()
            val startColor = ResourceUtils.getColor(R.color.day_mode_rate_line_start_color)
            val endColor = ResourceUtils.getColor(R.color.day_mode_rate_line_end_color)
            drawable.setColorAndRadius(startColor, endColor, 5f)
            rateLineView.background = drawable
            val rateTv = view.findViewById<TextView>(R.id.rate)
            (rateTv.layoutParams as? LayoutParams)?.leftMargin = gap
            rateTv?.text = "${it.getFundRate()}%"
            val titleTv = view.findViewById<TextView>(R.id.name)
            titleTv?.text = it.getFundName()
            val params = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
            params.topMargin = gap
            view.tag = it.getFundRate()
            rateLineView.hide(true)
            view.measure(widthMeaspec, heightMeasureSpec)

            if(maxTitleWidth < titleTv.measuredWidth)
                maxTitleWidth = titleTv.measuredWidth

            if(maxRateWidth < rateTv.measuredWidth)
                maxRateWidth = rateTv.measuredWidth

            rateLineView.show()
            addView(view, params)
        }

        fundTitleTv?.layoutParams?.width = maxTitleWidth
        if (childCount > notFundChildCount) {
            (notFundChildCount until childCount)?.forEach {
                getChildAt(it)?.findViewById<View>(R.id.name)?.layoutParams?.width = maxTitleWidth
            }
        }
    }
  • 著重看一下我圈起來的幾個地方
    image.png
  1. 首先創(chuàng)建widthMeasureSpec, heightMeasureSpec, 也就是調(diào)用View.measre()方法的兩個參數(shù)
  2. 遍歷集合創(chuàng)建出對應(yīng)的子item
  3. 調(diào)用view的measure方法, 這樣就能測出左邊title的寬度了
  4. 通過計算纪铺,將最大的title寬度保存到maxTitleWidth
  5. 遍歷所有的child,將左邊的title控件的寬度改成maxTitleWidth

以上5步就能實現(xiàn)所給的效果圖了突诬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芜繁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蔬捷,更是在濱河造成了極大的恐慌,老刑警劉巖周拐,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凰兑,死亡現(xiàn)場離奇詭異,居然都是意外死亡勾给,警方通過查閱死者的電腦和手機滩报,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門脓钾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桩警,“玉大人,你說我怎么就攤上這事生真≈埃” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵长已,是天一觀的道長。 經(jīng)常有香客問我角溃,道長,這世上最難降的妖魔是什么盔腔? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任辜伟,我火速辦了婚禮,結(jié)果婚禮上导狡,老公的妹妹穿的比我還像新娘。我一直安慰自己旱捧,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布枚赡。 她就那樣靜靜地躺著标锄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪料皇。 梳的紋絲不亂的頭發(fā)上谓松,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天鬼譬,我揣著相機與錄音逊脯,去河邊找鬼。 笑死军洼,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的匕争。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼拍皮,長吁一口氣:“原來是場噩夢啊……” “哼跑杭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起德谅,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宅荤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冯键,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡庸汗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了改化。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枉昏。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖兄裂,靈堂內(nèi)的尸體忽然破棺而出阳藻,到底是詐尸還是另有隱情谈撒,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布蛔外,位于F島的核電站,受9級特大地震影響夹厌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尊流,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一灯帮、第九天 我趴在偏房一處隱蔽的房頂上張望钟哥。 院中可真熱鬧,春花似錦瞎访、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽写烤。三九已至拾徙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尼啡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工崖瞭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人书聚。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓藻雌,卻偏偏與公主長得像疹吃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子萨驶,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容