一级ā片在线观看播放|97超爽人妻免费视频|国产精品免费看久久久网|国产综合无码免费一区二区|亚洲制服丝袜日韩熟女中文|欧美精品一区二区高清在线|国产一区二区波多野结衣av|裸体丰满少妇做受久久99精品

      1. <source id="x6jup"></source>
        
        

      2. 燚軒科技 助力中小型企業(yè)

        關(guān)注行業(yè)新聞 把握時(shí)代脈搏

        安卓app開發(fā)中解決recycleview 和 scollview 嵌套 問題

        app開發(fā)問題,鄭州app開發(fā) 2018-03-07 4386

        有時(shí)候想要recycleview 和 scollview 嵌套 并且全部展開recycleview,這樣的app技術(shù)無疑是很多人頭疼的,那么下面鄭州app開發(fā)就來詳細(xì)的講解一下。

        鄭州app開發(fā)

        但是會(huì)發(fā)現(xiàn) 簡單的嵌套后 recycleview不能滑動(dòng) 或者無法看到展開的全部內(nèi)容

        下面鄭州app開發(fā)小編為大家附上解決問題的代碼

        經(jīng)過查閱相關(guān)內(nèi)容發(fā)現(xiàn)在設(shè)置recycleview。setLayoutManager可以解決這個(gè)問題

        下面是manager的代碼

        public class FullyLinearLayoutManager extends LinearLayoutManager {

        private static boolean canMakeInsetsDirty = true;

        private static Field insetsDirtyField = null;

        private static final int CHILD_WIDTH = 0;

        private static final int CHILD_HEIGHT = 1;

        private static final int DEFAULT_CHILD_SIZE = 100;

        private final int[] childDimensions = new int[2];

        private final RecyclerView view;

        private int childSize = DEFAULT_CHILD_SIZE;

        private boolean hasChildSize;

        private int overScrollMode = ViewCompat.OVER_SCROLL_ALWAYS;

        private final Rect tmpRect = new Rect();

        public FullyLinearLayoutManager(Context context) {

        super(context);

        this.view = null;

        }

        public FullyLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {

        super(context, orientation, reverseLayout);

        this.view = null;

        }

        public FullyLinearLayoutManager(RecyclerView view) {

        super(view.getContext());

        this.view = view;

        this.overScrollMode = ViewCompat.getOverScrollMode(view);

        }

        public FullyLinearLayoutManager(RecyclerView view, int orientation, boolean reverseLayout) {

        super(view.getContext(), orientation, reverseLayout);

        this.view = view;

        this.overScrollMode = ViewCompat.getOverScrollMode(view);

        }

        public void setOverScrollMode(int overScrollMode) {

        if (overScrollMode < ViewCompat.OVER_SCROLL_ALWAYS || overScrollMode > ViewCompat.OVER_SCROLL_NEVER)

        throw new IllegalArgumentException("Unknown overscroll mode: " + overScrollMode);

        if (this.view == null) throw new IllegalStateException("view == null");

        this.overScrollMode = overScrollMode;

        ViewCompat.setOverScrollMode(view, overScrollMode);

        }

        public static int makeUnspecifiedSpec() {

        return View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);

        }

        @Override

        public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, int widthSpec, int heightSpec) {

        final int widthMode = View.MeasureSpec.getMode(widthSpec);

        final int heightMode = View.MeasureSpec.getMode(heightSpec);

        final int widthSize = View.MeasureSpec.getSize(widthSpec);

        final int heightSize = View.MeasureSpec.getSize(heightSpec);

        final boolean hasWidthSize = widthMode != View.MeasureSpec.UNSPECIFIED;

        final boolean hasHeightSize = heightMode != View.MeasureSpec.UNSPECIFIED;

        final boolean exactWidth = widthMode == View.MeasureSpec.EXACTLY;

        final boolean exactHeight = heightMode == View.MeasureSpec.EXACTLY;

        final int unspecified = makeUnspecifiedSpec();

        if (exactWidth && exactHeight) {

        // in case of exact calculations for both dimensions let's use default "onMeasure" implementation

        super.onMeasure(recycler, state, widthSpec, heightSpec);

        return;

        }

        final boolean vertical = getOrientation() == VERTICAL;

        initChildDimensions(widthSize, heightSize, vertical);

        int width = 0;

        int height = 0;

        // it's possible to get scrap views in recycler which are bound to old (invalid) adapter entities. This

        // happens because their invalidation happens after "onMeasure" method. As a workaround let's clear the

        // recycler now (it should not cause any performance issues while scrolling as "onMeasure" is never

        // called whiles scrolling)

        recycler.clear();

        final int stateItemCount = state.getItemCount();

        final int adapterItemCount = getItemCount();

        // adapter always contains actual data while state might contain old data (f.e. data before the animation is

        // done). As we want to measure the view with actual data we must use data from the adapter and not from the

        // state

        for (int i = 0; i < adapterItemCount; i++) {

        if (vertical) {

        if (!hasChildSize) {

        if (i < stateItemCount) {

        // we should not exceed state count, otherwise we'll get IndexOutOfBoundsException. For such items

        // we will use previously calculated dimensions

        measureChild(recycler, i, widthSize, unspecified, childDimensions);

        } else {

        logMeasureWarning(i);

        }

        }

        height += childDimensions[CHILD_HEIGHT];

        if (i == 0) {

        width = childDimensions[CHILD_WIDTH];

        }

        if (hasHeightSize && height >= heightSize) {

        break;

        }

        } else {

        if (!hasChildSize) {

        if (i < stateItemCount) {

        // we should not exceed state count, otherwise we'll get IndexOutOfBoundsException. For such items

        // we will use previously calculated dimensions

        measureChild(recycler, i, unspecified, heightSize, childDimensions);

        } else {

        logMeasureWarning(i);

        }

        }

        width += childDimensions[CHILD_WIDTH];

        if (i == 0) {

        height = childDimensions[CHILD_HEIGHT];

        }

        if (hasWidthSize && width >= widthSize) {

        break;

        }

        }

        }

        if (exactWidth) {

        width = widthSize;

        } else {

        width += getPaddingLeft() + getPaddingRight();

        if (hasWidthSize) {

        width = Math.min(width, widthSize);

        }

        }

        if (exactHeight) {

        height = heightSize;

        } else {

        height += getPaddingTop() + getPaddingBottom();

        if (hasHeightSize) {

        height = Math.min(height, heightSize);

        }

        }

        setMeasuredDimension(width, height);

        if (view != null && overScrollMode == ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS) {

        final boolean fit = (vertical && (!hasHeightSize || height < heightSize))

        || (!vertical && (!hasWidthSize || width < widthSize));

        ViewCompat.setOverScrollMode(view, fit ? ViewCompat.OVER_SCROLL_NEVER : ViewCompat.OVER_SCROLL_ALWAYS);

        }

        }

        private void logMeasureWarning(int child) {

        }

        private void initChildDimensions(int width, int height, boolean vertical) {

        if (childDimensions[CHILD_WIDTH] != 0 || childDimensions[CHILD_HEIGHT] != 0) {

        // already initialized, skipping

        return;

        }

        if (vertical) {

        childDimensions[CHILD_WIDTH] = width;

        childDimensions[CHILD_HEIGHT] = childSize;

        } else {

        childDimensions[CHILD_WIDTH] = childSize;

        childDimensions[CHILD_HEIGHT] = height;

        }

        }

        @Override

        public void setOrientation(int orientation) {

        // might be called before the constructor of this class is called

        //noinspection ConstantConditions

        if (childDimensions != null) {

        if (getOrientation() != orientation) {

        childDimensions[CHILD_WIDTH] = 0;

        childDimensions[CHILD_HEIGHT] = 0;

        }

        }

        super.setOrientation(orientation);

        }

        public void clearChildSize() {

        hasChildSize = false;

        setChildSize(DEFAULT_CHILD_SIZE);

        }

        public void setChildSize(int childSize) {

        hasChildSize = true;

        if (this.childSize != childSize) {

        this.childSize = childSize;

        requestLayout();

        }

        }

        private void measureChild(RecyclerView.Recycler recycler, int position, int widthSize, int heightSize, int[] dimensions) {

        final View child;

        try {

        child = recycler.getViewForPosition(position);

        } catch (IndexOutOfBoundsException e) {

        return;

        }

        final RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) child.getLayoutParams();

        final int hPadding = getPaddingLeft() + getPaddingRight();

        final int vPadding = getPaddingTop() + getPaddingBottom();

        final int hMargin = p.leftMargin + p.rightMargin;

        final int vMargin = p.topMargin + p.bottomMargin;

        // we must make insets dirty in order calculateItemDecorationsForChild to work

        makeInsetsDirty(p);

        // this method should be called before any getXxxDecorationXxx() methods

        calculateItemDecorationsForChild(child, tmpRect);

        final int hDecoration = getRightDecorationWidth(child) + getLeftDecorationWidth(child);

        final int vDecoration = getTopDecorationHeight(child) + getBottomDecorationHeight(child);

        final int childWidthSpec = getChildMeasureSpec(widthSize, hPadding + hMargin + hDecoration, p.width, canScrollHorizontally());

        final int childHeightSpec = getChildMeasureSpec(heightSize, vPadding + vMargin + vDecoration, p.height, canScrollVertically());

        child.measure(childWidthSpec, childHeightSpec);

        dimensions[CHILD_WIDTH] = getDecoratedMeasuredWidth(child) + p.leftMargin + p.rightMargin;

        dimensions[CHILD_HEIGHT] = getDecoratedMeasuredHeight(child) + p.bottomMargin + p.topMargin;

        // as view is recycled let's not keep old measured values

        makeInsetsDirty(p);

        recycler.recycleView(child);

        }

        private static void makeInsetsDirty(RecyclerView.LayoutParams p) {

        if (!canMakeInsetsDirty) {

        return;

        }

        try {

        if (insetsDirtyField == null) {

        insetsDirtyField = RecyclerView.LayoutParams.class.getDeclaredField("mInsetsDirty");

        insetsDirtyField.setAccessible(true);

        }

        insetsDirtyField.set(p, true);

        } catch (NoSuchFieldException e) {

        onMakeInsertDirtyFailed();

        } catch (IllegalAccessException e) {

        onMakeInsertDirtyFailed();

        }

        }

        private static void onMakeInsertDirtyFailed() {

        canMakeInsetsDirty = false;

        }

        }

        以上信息由鄭州app開發(fā)公司燚軒科技整理發(fā)布。


        版權(quán)與免責(zé)聲明

        鄭州APP開發(fā),鄭州小程序開發(fā)燚軒軟件科技有限公司聲明:如發(fā)現(xiàn)內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息發(fā)郵件至854221200@qq.com,我們將及時(shí)溝通處理。本站內(nèi)容源于網(wǎng)絡(luò),涉及內(nèi)容、言論與本站無關(guān)

        分享到微信朋友圈 +
        打開微信,點(diǎn)擊底部的“發(fā)現(xiàn)”,使用 “掃一掃” 即可將網(wǎng)頁分享到我的朋友圈。 如何使用?
        推薦文章
        鄭州app開發(fā)公司:代駕app開發(fā)要多少錢才夠

        為目前汽車銷售行業(yè)非常的火,才導(dǎo)致了一些與汽車相關(guān)的行業(yè)對(duì)于app開發(fā)的需求非常的大...

        燚軒科技    · 11月08日 ·    代駕app開發(fā),鄭州app開發(fā)公司
        4228 閱讀量
        我們共住“地球村”,社交APP拉近人與人之間的距離

        們相互交流的方式。以前,人們之間的交流是通過互相寫信進(jìn)行的,中間的過程很緩慢?,F(xiàn)在,人們可以...

        燚軒科技    · 10月14日 ·    鄭州APP開發(fā),鄭州APP制作,鄭州APP開發(fā)公司
        3745 閱讀量
        小程序開發(fā)有哪些流程?

        已經(jīng)占領(lǐng)了我們生活中的點(diǎn)點(diǎn)滴滴。從2017年1月9日微信小程序正式開放到現(xiàn)在,微信小程序的月...

        燚軒科技    · 11月08日 ·    小程序開發(fā)
        4512 閱讀量
        app開發(fā)、小程序開發(fā)、微信開發(fā)及網(wǎng)站建設(shè)的區(qū)別

        小程序開發(fā)以及微信開發(fā)、網(wǎng)站建設(shè)之間存在什么樣的區(qū)別呢?下面咱們用一張表格來詳細(xì)的跟大家說明...

        燚軒科技    · 12月18日 ·    app開發(fā),小程序開發(fā),微信開發(fā),網(wǎng)站建設(shè)
        4594 閱讀量
        淘客分銷APP開發(fā)解決方案

        小編今天給大家講淘客分銷app開發(fā)解決方案,功能架構(gòu)設(shè)計(jì):構(gòu)建全鏈路分銷體系核心功能模塊,智...

        燚軒科技    · 04月11日 ·    鄭州app定制,鄭州app定制公司,鄭州app開發(fā)公司,鄭州app開發(fā)
        726 閱讀量
        鄭州APP開發(fā):長久不衰的APP都有什么特點(diǎn)

        小編發(fā)現(xiàn)像線上的業(yè)務(wù)卻涌入了大批量的流量,就像企業(yè)辦公性質(zhì)的釘釘怎么也沒想到會(huì)被小學(xué)生占據(jù)成...

        燚軒科技    · 04月13日 ·    APP開發(fā) 、鄭州APP開發(fā)
        3298 閱讀量
        宝坻区| 叙永县| 上饶县| 胶南市| 富阳市| 沙湾县| 长子县| 施秉县| 舟曲县| 诸城市| 西青区| 昂仁县| 萨嘎县| 谢通门县| 鄄城县| 沙湾县| 日喀则市| 西丰县| 财经| 慈溪市| 炉霍县| 五常市| 游戏| 寿阳县| 若羌县| 江西省| 博乐市| 丹棱县| 城市| 行唐县| 桐城市| 黄山市| 民乐县| 蕲春县| 天津市| 闸北区| 汾阳市| 陆丰市| 准格尔旗| 庆城县| 张家港市|