使用DialogFragment 實現(xiàn)嵌套ViewPager生巡,按照最高高度布局耙蔑,適配列表布局

產(chǎn)品需求:

一個dialog中有個點擊顯示詳情按鈕,而詳情要是在彈窗內(nèi)部展示孤荣,產(chǎn)品需要的效果是想頁面跳轉(zhuǎn)一樣有一個向右的動畫效果甸陌,這個時候就想到了在dialog中嵌套viewpager來完成

碰到的問題:

  • 選擇方案
    在dialog中嵌套viewpager會存在報錯的異常,網(wǎng)上有很多多說了盐股,給出的解決方案是使用dialogfragment來替代dialog嵌套viewpager钱豁,由于自身項目中fragment使用也很多,所以就直接選用這套方案疯汁。
  • 高度匹配問題
    由于viewpager里面的布局高度為wrap_content時并沒作用牲尺,會出現(xiàn)高度撐不滿或者空白區(qū)域很多的情況,這個時候需要一個復(fù)寫viewpager的自定義控件幌蚊,計算子空間高度谤碳,取最大高度設(shè)置會viewapager高度,復(fù)寫onMeasure方法溢豆,代碼如下
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    int height = 0;
    for(int i = 0; i < getChildCount(); i++) {
        View child = getChildAt(i);
        child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        int h = child.getMeasuredHeight();
        if(h > height) height = h;
    }

    heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
  • 新問題的出現(xiàn)
    本以為就此可以結(jié)束蜒简,但是在添加了詳情界面的列表是,出現(xiàn)了高度鋪滿屏幕的問題漩仙,新出現(xiàn)的問題是搓茬,列表界面的height測量出來是無效高的,只要沒有設(shè)置指定的高度讯赏,是會把所有的高度給到列表的垮兑,所以通過上訴的重寫onMeasure測量出來的最大child的高度就是撐屏幕的高度冷尉。仔細(xì)研究需求漱挎,根據(jù)我們界面,詳情列表的展示區(qū)域是和當(dāng)前界面的展示區(qū)域是一樣高度的雀哨,所以改造onMeasure方法 之測量第一個pager的高度作為viewpager的高度磕谅,代碼如下

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {

    var height = 0
    //下面遍歷所有child的高度
    for (i in 0 until childCount) {
        if (i == 0) {
            val child = getChildAt(i)
            child.measure(widthMeasureSpec,
                    View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED))
            val h = child.measuredHeight
            if (h > height)
            //采用最大的view的高度。
                height = h
        }
    }

    var heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY)

    super.onMeasure(widthMeasureSpec, heightMeasureSpec)
}
  • 額外的需求
    去除viewpager的滑動效果雾棺,只有在點擊的時候進(jìn)行跳轉(zhuǎn)膊夹,實現(xiàn)點擊右滑動畫,只需要在剛才自定義viewpager的控件中添加:

fun setNoScroll(noScroll: Boolean) {

    this.noScroll = noScroll
}

override fun onTouchEvent(arg0: MotionEvent): Boolean {
    return if (noScroll)
        false
    else
        super.onTouchEvent(arg0)
}

override fun onInterceptTouchEvent(arg0: MotionEvent): Boolean {
    return if (noScroll)
        false
    else
        super.onInterceptTouchEvent(arg0)
}
  • 邊距問題
    最后碰到一個非常奇怪的問題捌浩,設(shè)置viewpager內(nèi)部pager的邊距時 直接設(shè)置在跟布局viewpager上放刨,在內(nèi)部pager設(shè)置邊距可能會和跟布局padding沖突,僅此記錄尸饺。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末进统,一起剝皮案震驚了整個濱河市助币,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌螟碎,老刑警劉巖眉菱,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異掉分,居然都是意外死亡俭缓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門酥郭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來华坦,“玉大人,你說我怎么就攤上這事褥民〖敬海” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵消返,是天一觀的道長载弄。 經(jīng)常有香客問我,道長撵颊,這世上最難降的妖魔是什么宇攻? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮倡勇,結(jié)果婚禮上逞刷,老公的妹妹穿的比我還像新娘。我一直安慰自己妻熊,他們只是感情好夸浅,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扔役,像睡著了一般帆喇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亿胸,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天坯钦,我揣著相機(jī)與錄音,去河邊找鬼侈玄。 笑死婉刀,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的序仙。 我是一名探鬼主播突颊,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了律秃?” 一聲冷哼從身側(cè)響起呈昔,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎友绝,沒想到半個月后堤尾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡迁客,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年郭宝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掷漱。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡粘室,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卜范,到底是詐尸還是另有隱情衔统,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布海雪,位于F島的核電站锦爵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏奥裸。R本人自食惡果不足惜险掀,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望湾宙。 院中可真熱鬧樟氢,春花似錦、人聲如沸侠鳄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伟恶。三九已至碴开,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間知押,已是汗流浹背叹螟。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工鹃骂, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留台盯,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓畏线,卻偏偏與公主長得像静盅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

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