viewpager嵌多個fragment高度不一致時的問題解決

解決思路:在fragment里動態(tài)獲取當前布局高度,然后通過sendBroadcast發(fā)送給廣播接收者,然后動態(tài)設置viewpager的高度

在Fragment里

  @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (getUserVisibleHint() && isResumed()) {
            int layoutParamsHeight = ViewUtil.getLayoutParamsHeight(f_vdd_layout);           
            getActivity().sendBroadcast(new Intent(TestActivity.ACTION_LAYOUT_PARAMS).putExtra("receive_height ", layoutParamsHeight));
        }
    }


在TestActivity

public static final String ACTION_LAYOUT_PARAMS = "layOut_vieWP1ger";

  private BroadcastReceiver br = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            int receiveHeight = intent.getIntExtra("receive_height ", -1);
            Log.e(TAG, "onReceive: " + receiveHeight);
            ViewGroup.LayoutParams layoutParams = viewPager.getLayoutParams();
            layoutParams.height = receiveHeight;
            viewPager.setLayoutParams(layoutParams);
        }
    };

用到的工具類

   public class ViewUtil {
       private static final String TAG = "ViewUtil";

    /**
     * 獲取ListView所有子View疊加的高度
     *
     * @param listView
     * @return
     */
    public static int getListViewParams(ListView listView) {
        //通過ListView獲取其中的適配器adapter
        ListAdapter listAdapter = listView.getAdapter();

        //聲明默認高度為0
        int totalHeight = 0;
        //便利ListView所有的item,累加所有item的高度就是ListView的實際高度
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getLayoutParams().height;
            Log.e(TAG, "getListViewParams: " + totalHeight + " -- " + listItem.getMeasuredHeight() + " -- " + listItem.getLayoutParams().height + " -- " + listAdapter.getCount() + " -- " + " -- " + i);
        }
        //將累加獲取的totalHeight賦值給LayoutParams的height屬性
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        int height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));

        return height;
    }

    /**
     * 獲取GirdView所有子View疊加的高度
     *
     * @param gridView
     * @return
     */
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    public static int getGirdViewParams(GridView gridView) {
        //通過ListView獲取其中的適配器adapter
        ListAdapter listAdapter = gridView.getAdapter();
        //聲明默認高度為0
        int totalHeight = 0;
        //遍歷ListView所有的item,累加所有item的高度就是ListView的實際高度
        for (int i = 0; i < listAdapter.getCount(); i += 2) {
            View listItem = listAdapter.getView(i, null, gridView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
            Log.e(TAG, "getGirdViewParams: " + " -- " + totalHeight + " -- " + listItem.getMeasuredHeight() + " -- " + listItem.getLayoutParams().height + " -- " + listAdapter.getCount() + " -- " + " -- " + i);
            listItem.measure(0, 0);
        }
        //將累加獲取的totalHeight賦值給LayoutParams的height屬性
        ViewGroup.LayoutParams params = gridView.getLayoutParams();
        params.height = totalHeight + (gridView.getVerticalSpacing() * (listAdapter.getCount() - 1));
        int height = totalHeight + (gridView.getVerticalSpacing() * (listAdapter.getCount() - 1));

        return height;
    }

    /**
     * 獲取ViewGroup的布局里的高度
     *
     * @param viewGroup
     * @return
     */
    public static int getLayoutParamsHeight(ViewGroup viewGroup) {
        int height = viewGroup.getLayoutParams().height;
        int measuredHeight = viewGroup.getMeasuredHeight();
        Log.e(TAG, "getLayoutParamsHeight: " + height + " -- " + measuredHeight);
        return height;
    }
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,936評論 25 709
  • 最近剛從舊公司離職,為面試在做準備,因為平時開發(fā)CV大法用得比較多,很多基礎知識掌握得不是很牢靠以及很多工具框架只...
    黎清海閱讀 2,327評論 1 19
  • 姓名:馬其岳 公司:寧波大發(fā)化纖有限公司 【日精進打卡第22天】 【知~學習】 《六項精進》大綱 2遍- 《大學》...
    馬其岳閱讀 148評論 0 0
  • 安住在喜悅之中,而不是更優(yōu)秀。慢慢來,感受輕而易舉的富足。 【今天我的小確幸和美好種子有哪些?】 1.整理出來的3...
    大暖小佳閱讀 336評論 2 1
  • 斷言條件不滿足, 會使程序中斷,在debug時有效,release版本失效。//assert(1>0)//asse...
    _我和你一樣閱讀 248評論 0 0

友情鏈接更多精彩內(nèi)容